URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 10128
[ Назад ]

Исходное сообщение
"C Перенаправить файл в дочерний процесс обработать tail и"

Отправлено mesmeridze , 15-Ноя-16 08:35 
Добрый день коллеги.
Поставили такую задачу. Нужно из родительского в дочерний процесс передать некий файл, там его пропустить чере more / head / tail кому что нравится. Затем полученный вывод вернуть родителю ну и родитель собственно должен этот текст вывести на экран.
(институтская задача не бейте тапками)

Если я правильно понял использовать нужно fork, в родителе файл можно открыть при помощи fopen и передать дескриптор дочернему процессу. Поскольку как я читал дескриптор будет доступен последнему, то остаётся решить вопрос как это вот всё скормить перечисленным утилитам, а потом весь этот вывод вернуть родителю. Я могу это сделать через system, но чует моё сердце есть не рагульский вариант.

Подскажите пожалуйста как правильно это сделали Вы.
Спасибо


Содержание

Сообщения в этом обсуждении
"C Перенаправить файл в дочерний процесс обработать tail и"
Отправлено Аноним , 15-Ноя-16 11:23 
man 2 pipe


"C Перенаправить файл в дочерний процесс обработать tail и"
Отправлено mesmeridze , 15-Ноя-16 14:08 
> man 2 pipe

Ага, спасибо. Только вопрос как мне открыть head при помощи fopen какой параметр, w ?


"C Перенаправить файл в дочерний процесс обработать tail и"
Отправлено Аноним , 15-Ноя-16 18:03 
>> man 2 pipe
> Ага, спасибо. Только вопрос как мне открыть head при помощи fopen какой
> параметр, w ?

https://github.com/coreutils/coreutils/blob/master/src/head.c


"C Перенаправить файл в дочерний процесс обработать tail и"
Отправлено Pahanivo , 15-Ноя-16 21:35 
сессией запахло .... :)

"C Перенаправить файл в дочерний процесс обработать tail и"
Отправлено ПавелС , 18-Ноя-16 15:09 
>[оверквотинг удален]
> этот текст вывести на экран.
> (институтская задача не бейте тапками)
> Если я правильно понял использовать нужно fork, в родителе файл можно открыть
> при помощи fopen и передать дескриптор дочернему процессу. Поскольку как я
> читал дескриптор будет доступен последнему, то остаётся решить вопрос как это
> вот всё скормить перечисленным утилитам, а потом весь этот вывод вернуть
> родителю. Я могу это сделать через system, но чует моё сердце
> есть не рагульский вариант.
> Подскажите пожалуйста как правильно это сделали Вы.
> Спасибо

Как вернуть текст я не знаю, простейшее родитель должен отпечатать файл на stdout. Остальные команды могут читать типа родитель | tail | head | ..etc. Как замкнуть вывод последнего в конвейере обратно на stdin родителя не знаю, может кто подскажет. Результат родитель может напечатать на stderr онсвободен и отобразится на экране.