【问题标题】:print to screen from fifo stdout failed从 fifo 标准输出打印到屏幕失败
【发布时间】:2016-04-20 12:39:37
【问题描述】:

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

【问题讨论】:

  • 是的,我只是用它作为例子

标签: c stdout fifo dup execl


【解决方案1】:

恐怕你们的要求会互相冲突。

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

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

阻止其他孩子将消息打印到屏幕上,只是为了 先进先出

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

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

【讨论】:

    猜你喜欢
    • 2012-10-02
    • 2013-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 2018-12-25
    • 2018-08-10
    相关资源
    最近更新 更多