2016-04-20 4 views
0

У меня есть программа, которая имеет 2 детей (работает 2 процесса от execl) и один fifo. Я не могу использовать printf, и я хочу, чтобы оба ребенка писали и читали из fifo. проблема в том, что я хочу только ребенка, чтобы убедиться, что все, что он пишет в мой FIFO, будет распечатано на экране. «fifoCommunication» - это имя фифо, созданного отцом. здесь код в процессе первого ребенка только:Печать на экран из fifo stdout не удалась

int main() { 
int fd_write = open("fifoCommunication",O_WRONLY); 
dup(fd_write,0); 
write(fd_write,"to be printed to screen!" ,18);} 

Я знаю, что это не правильный синтаксис, но я не знаю, как убедиться, что сообщение выводится на экран правильно, а также предотвращая другого ребенка для печати сообщений на экране, только для FIFO.

+0

Да, я просто использовал его в качестве примера –

ответ

1

Боюсь, что ваши требования противоречат друг другу.

Я хочу, чтобы только первый ребенок был уверен, что все, что он пишет на мой FIFO, будет распечатано на экране.

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

предотвращения другого ребенка выводить сообщения на экран, только в FIFO

Поэтому это противоречит выше, поскольку печать «только ФИФО» должен печатать на экране также, если бывший требование должен быть выполнен. Вы можете добиться того, чего хотите, распечатав отдельно на fifo и на stdout.

(если вы не изменили код ядра, чтобы, например, проверить первый байт сообщения для печати, поэтому вы должны префикс каждой информации с помощью «1» или «2» или любого другого, что вы выберете, и предпримите соответствующие действия в ядро, основанное на этом, - но тогда то, что произойдет со всеми другими применениями fifo на вашей машине, не имеет ничего хорошего, поэтому не делайте этого)