c中的命名管道
Posted
技术标签:
【中文标题】c中的命名管道【英文标题】:Named pipes in c 【发布时间】:2010-11-14 21:29:30 【问题描述】:我正在尝试在 C 中使用命名管道,但遇到了一些困难。就匿名管道而言,我只是使用 r/w 描述符创建管道,然后每次我想进行读取或写入时关闭另一端。这很容易做到,因为我每次都可以打开()和关闭()另一端。
对于命名管道,我有点困惑,我找到了创建命名管道的指令mkfifo()
,但不明白如何正确读取和写入它。
谢谢
【问题讨论】:
您的问题不清楚。open
从未与普通(匿名)管道一起使用,所以我想知道你是否正在做你认为你正在做的事情。
您可能会忽略 fifo 需要在两端打开一个写入和另一个读取的点。 fifo 上的任何读/写调用都会阻塞。手册页在这里linux.die.net/man/3/mkfifo。否则你不是在问问题,只是陈述你的问题。你写了什么代码,是什么造成了你的困惑?
阅读Beej's Guide to Unix IPC。
对于匿名管道,我首先使用 pipe() 函数创建它们,然后让一个进程读取和一个写入管道,但它必须先关闭另一端。它似乎工作正常,并且基于tldp.org/LDP/lpg/node11.html 的示例
【参考方案1】:
在使用mkfifo()
创建管道后(过去可以在任何时候完成 - 命名管道存在于文件系统中,直到它们被取消链接),读取端使用open("/path/to/pipe", O_RDONLY)
和写作方用open("/path/to/pipe", O_WRONLY)
打开它。
之后它可以像匿名管道一样使用。
【讨论】:
【参考方案2】:没什么大不了的。使用 mkfifo 制作管道,然后让您的进程像任何文件一样对其进行读写。它也不是 C 特定的。你可以这样做:
mkfifo testfifo
猫 testfifo
然后在另一个窗口中
echo "hello, world" > testfifo
【讨论】:
【参考方案3】:我认为你应该只使用管道,因为无论每个进程花费多少时间,它们都会处理不同进程之间的数据传输
【讨论】:
以上是关于c中的命名管道的主要内容,如果未能解决你的问题,请参考以下文章