从fifo stdout打印到屏幕失败

时间:2016-04-20 12:39:38

标签: c stdout fifo dup execl

我有一个程序,它有2个子节点(由execl运行2个进程)和一个fifo。 我不能使用printf,我希望两个孩子都能从fifo写入和读取。 问题是,我只想要第一个孩子来确保他写入我的FIFO的所有内容都会打印到屏幕上。 " fifoCommunication"是父亲创建的fifo的名字。 这里只是第一个子进程中的代码:

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

我知道它不是正确的语法,但我不知道如何确保消息正确地打印到屏幕上,并且还阻止其他孩子将消息打印到屏幕上,到FIFO。

1 个答案:

答案 0 :(得分:1)

我担心您的要求会相互冲突。

  

我只想让第一个孩子确保他写给我的所有东西   FIFO将打印到屏幕上。

因此,无论获得什么,FIFO都必须打印到控制台。 FIFO不区分已打印到它的进程。它不知道这是第一个或第二个孩子此时打电话写 1

  

阻止其他孩子向屏幕打印消息,仅限于   FIFO

因此这与上述相矛盾,因为如果要满足以前的要求,打印“仅限于fifo”也必须打印到屏幕上。 您可以通过单独打印到fifo和stdout来实现您想要的效果。

1 (除非您更改内核代码以检查要打印的消息的第一个字节,因此您可以在每个数据前加上'1'或'2'或您选择的任何内容基于此在内核中采取适当的操作 - 但是在你的机器上对fifo的所有其他用途将会发生的事情是最有可能的,所以不要这样做。