простая командная программа перенаправления файла unix для не встроенных команд - PullRequest
3 голосов
/ 03 февраля 2011

Я пытаюсь написать простую программу-оболочку, и у меня возникают проблемы с перенаправлением файлов для не встроенных команд.Например ./a.out outfile, пользовательская программа a.out будет принимать входную информацию из infile и выводить ее выходные данные в outfile вместо потоков, которые она обычно использует.Когда я сталкиваюсь с не встроенной командой, я запускаю новый процесс и накладываю новый образ с предоставленными аргументами.Общий формат - команда arg1 arg2 ... argn outfile.Таким образом, аргументы (arg1 - argn) будут переданы в новом изображении, а вход и выход будут изменены на infile и outfile. Вот фрагмент того, как выглядит мой процесс разветвления.команда Unix, которая позволит мне сделать это?Я также думал, что может быть способ изменить stdin и stdout в новом образе?Любые ссылки или информация будут оценены.

Ответы [ 2 ]

2 голосов
/ 03 февраля 2011

В разветвленном процессе, непосредственно перед exec -ing новым изображением, закройте дескрипторы файлов 0 (стандартный вывод), 1 (стандартный вывод) и, возможно, 2 (стандартный вывод).

Затем используйте open()откройте необходимые файлы в правильном порядке (stdin, out и err).Каждый из них будет использовать первые записи в таблице дескрипторов файлов - 0, 1 и 2. Таким образом, первый открытый файл будет теперь обрабатываться как stdin.

2 голосов
/ 03 февраля 2011

В Unix для этого обычно требуется dup2. См. libc docs для дублирования файловых дескрипторов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...