从 fifo stdout 打印到屏幕失败

print to screen from fifo stdout failed

我有一个程序,它有 2 个 children(运行 2 个由 execl 处理的进程)和一个 fifo。 我不能使用 printf,我希望 children 都可以从 fifo 写入和读取。 问题是,我只想 first child 确保他写入我的 FIFO 的所有内容都将打印到屏幕上。 "fifoCommunication"是爸爸创建的fifo的名字。 这是第一个 child 进程中的代码:

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

我知道这不是正确的语法,但我不知道如何确保消息正确打印到屏幕上,以及如何防止其他 child 将消息打印到屏幕上,仅到 FIFO。

恐怕你的要求相互冲突。

I want only first child to make sure that everything he writes to my FIFO will be printed out to the screen.

因此 FIFO 必须将它得到的任何内容打印到控制台。 FIFO 不区分已打印到它的进程。它不知道此时调用write的是老大还是老二1.

preventing the other child to print messages to the screen, only to the FIFO

所以这与上面矛盾,因为要满足前面的要求,打印"only to the fifo"也必须打印到屏幕上。 您可以通过分别打印到 fifo 和 stdout 来实现您想要的效果。

1(除非您将内核代码更改为例如检查要打印的消息的第一个字节,然后您将为每个数据添加前缀“1”或“2”或您选择的任何内容并基于此在内核中采取适当的操作 - 但是您机器上 fifo 的所有其他用途很可能会发生什么,所以不要这样做)