2014-01-21 3 views
3

Я пишу фильтр, и я изучаю подход к написанию программы. Мне было интересно, возможно ли это: от ввода в stdin, write to stdout, но перенаправить этот stdout таким образом, чтобы программа считывала сгенерированную stdout, как если бы она была stdin, опять же, таким образом, перерабатывая данные. Я не хочу хранить данные в гигантском массиве - я хочу сделать это, используя потоки, исключительно. Возможно ли это? (если нет, это тоже хорошо). Кроме того, примечание: я хочу сделать это только в одном исходном файле кода C.Можно ли перенаправить stdout как stdin в ту же программу?

+1

Это очень возможно, но как это сделать, во многом зависит от того, в какой системе вы находитесь (например, Windows или POSIX (например, Linux, OSX))? –

+0

Извините, я просто добавил примечание: я хочу сделать это только с помощью кода. Я считаю, что это возможно с помощью piping в командной строке Unix, но я хочу сделать это, используя pure C. – pyrrhic

+2

@JoachimPileborg Windows имеет достаточно интерфейса POSIX для этого, нет? – Potatoswatter

ответ

1

Да, вы можете создать pipe себе в любой системе POSIX.

Но нет никакого бесплатного обеда. Если вам нужно хранить данные, он должен куда-то идти. Канал поддерживается буфером, которым управляет ОС.

Вы можете буквально установить концы трубы на обратные stdin и stdout (как в ответе Йоахима), но я бы посоветовал это сделать, поскольку это будет отменять обычные входные и выходные каналы программы. (Ни C, ни служба POSIX не будут «терять» поток, чтобы пользователь мог видеть его, а также отражать его внутри программы.)

0

Создайте pipe. Duplicate считывающий конец трубы как новый STDIN_FILENO, конец записи как STDOUT_FILENO, и все готово. Все, что вы сейчас пишете до stdout, будет доступно по телефону stdin.

Смежные вопросы