Heigel
1) Попробуй начать с основ. Изучи систему ввода вывода
У любой программы есть стандартный ввод, стандартный вывод и стандартный вывод для ошибок.
Внутри программы эти стандартные вводы выводы выглядят как обычные файлы. Они уже открыты с самого старта приложения.
Считай что у тебя всегда доступны для работы
FILE *stdin, *stdout, *stderr;
Первый только для чтения вторые два только для записи.
2) изучи возможности конвейерной обработки данных
Стандартный ввод/вывод можно связать
- с консолью (обычно так и бывает когда ты просто запускаешь программу)
- с файлом (когда ты например вывод программы отпрвляешь в файл ps ax > process_list.txt здесь результат работы прораммы ps будет записан в файл process_list.txt сама программа не будет знать имени этого файла и что она вообще пишет в файл а не на консоль)
- с другим процессом (например ps ax | grep compiz здесь вывод программы ps передается другой программе grep и мы получаем примитивнеёший скрипт который все знают. grep не умеет получать список процессов, ps не умеет фильтровать вывод (это не совсем правда но в обучающих целях такое можно допустить) а соединив их вместе мы можем получать информацию только о необходимых нам процессах)
В твоём примере стандартная утилита cat открывает файл input.txt и выплёвывает его содержимое в свой стандартный вывод, её вывод соединён со стандартным вводом твоей программы. тебе не надо знать имя файла. его содержимое будет у тебя доступно из stdin. Когда встретишь конец ввода значит пора завершать работу. Можешь делать с данными что хочешь. Всё что ты напечатешь на стандартный вывод будет записано в файл output.txt тебе опять же не надо знать что да как и как называется этот файл. это всё прихоти пользователя. шел за тебя уже все откроет как надо и подцепит твою программу к этому файлу. просто пиши printf() и данные окажутся там где должны быть.
3) argc argv это параметры командной строки котрые касаются именно твоего приложения. шел распознаёт ввод пользователя и формирует окружение для соответствющих программ. в твоём случае у тебя argc будет равно 2 а argv будет содержать 2 строки 0:"my_program" 1:"input string"
Я без понятия что там тебе надо делать за задание, но удачи. Я не верю что ты успеешь =) невозможно писать на Си и не знать таких базовых вещей.