c - 从 fifo 标准输出打印到屏幕失败

标签 c stdout fifo dup execl

我有一个程序,它有 2 个子进程(通过 execl 运行 2 个进程)和一个 fifo。 我不能使用 printf,我希望两个 child 都能从 fifo 中写入和读取。 问题是,我只希望第一个 child 确保他写入我的 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);}

我知道这不是正确的语法,但我不知道如何确保消息正确打印到屏幕上,并防止另一个 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

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

1(除非您更改内核代码以检查要打印的消息的第一个字节,因此您可以在每个数据前加上“1”或“2”或您选择的任何内容)基于此在内核中采取适当的操作 - 但是您的计算机上所有其他使用 fifo 的情况很可能不会好,所以不要这样做)

关于c - 从 fifo 标准输出打印到屏幕失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36744091/

相关文章:

c - 打开()一个文件并在最后写入

c - 在 '=' 之前出现错误 : expected ',' , ';' 、 'asm' 、 '__attribute__' 或 'SolvePrecondMatrix'

c - 为什么以及如何保护结构成员免受 C 中的直接操作

java - 如何在 Android 中打印单元测试的标准输出?

php - echo 是否等于 fputs(STDout)?

c - & 运算符在结构上不做任何事情?

c - 当 vlclib event_manager 通知我时在 vlclib 中播放下一首歌曲

caching - FIFO 缓存与 LRU 缓存

c - 嵌入式 C 中的 FIFO 队列 - 计数器会溢出吗?