Оператор перенаправления против обработки файлов - PullRequest
1 голос
/ 03 марта 2012

При написании простой программы для POSIX-совместимой ОС, которая принимает входные данные и выдает выходные данные, когда и почему следует предпочитать

myprogram file.in

над

myprogram < file.in

и наоборот?

Мне нравится последнее, потому что я чувствую, что обработка файлов должна быть ответственностью оболочки, а не моей программы.С другой стороны, я не совсем уверен, как один и тот же код может работать как для файлов, так и для stdin - разве stdin не должен быть интерактивным, т.е. запрашивать у вас ввод?Принимая во внимание, что в файле формат понят и предопределен, например, существует одно целое число, которое является входным значением (в этом случае другой вариант будет просто принимать значение в качестве аргумента командной строки), иликаждая строка содержит контрольный пример, представляющий собой список чисел, разделенных пробелами, и т. д.

Примеры были бы хорошими.

Обратите внимание, что я уже видел Перенаправление оболочкиvs явный код обработки файлов , и ни один из ответов не ответил на этот вопрос в общем смысле.

Ответы [ 2 ]

3 голосов
/ 03 марта 2012

Это до предпочтения, и предполагаемое использование вашей программы должно сообщить ваше решение.

Философия UNIX предлагает написание простых инструментов, связанных чистыми интерфейсами.Создание инструмента, который принимает стандартный ввод, сделает его более универсальным.Вы сможете использовать инструмент из существующих файлов или из выходных данных любой другой команды POSIX.

1 голос
/ 03 марта 2012

Большинство утилит POSIX будут работать с файлом, если он указан в командной строке, или с stdin / stdout, если не указан файл (ы). Общие стили

  • myprogram filename
  • myprogram -f filename
  • myprogram --file=filename

Или можно указать индивидуальный ввод и вывод.

Это обеспечивает гибкость предоставления файла или использования перенаправления или конвейеризации.

main обрабатывает параметры и при необходимости открывает файл, а затем передает поток открытого файла - будь то из stdin или файла, который вы открыли - в вашу функцию обработки.

Это соответствует философии UNIX, как упоминал sgmorrison.

...