0

我有一个程序,它有 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。

4

1 回答 1

1

恐怕您的要求会相互冲突。

我只希望第一个孩子确保他写入我的 FIFO 的所有内容都将打印到屏幕上。

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

防止另一个孩子将消息打印到屏幕上,仅打印到 FIFO

因此这与上面的内容相矛盾,因为如果要满足前面的要求,“仅打印到 fifo”也必须打印到屏幕上。您可以通过分别打印到 fifo 和 stdout 来实现您想要的。

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

于 2016-04-20T12:54:03.623 回答