管道“地址系统”
Posted
技术标签:
【中文标题】管道“地址系统”【英文标题】:pipe "address system" 【发布时间】:2013-03-09 04:02:34 【问题描述】:也许我误解了How to make a pipe in c++ 因此http://linux.die.net/man/2/pipe,但是pipe
怎么知道从哪里发送或接收?
在通过 ajax 页面更新数据库时,我希望 ajax 程序向我的 websocket 程序发送消息以更新所有其他相关用户,建议使用 pipe
可能是最好的 how 2 c++ programs call each other's class/functions on same linux box? .
是否只有一个管道,所有程序都读取它并验证消息?
注意:如果有帮助,我正在使用 fastcgi++ 和 websocket++。
【问题讨论】:
【参考方案1】:如果希望多个独立进程从管道中读取数据,则需要使用命名管道,也称为FIFO。
使用mkfifo
函数,一个进程在文件系统(通常在/tmp
)中创建一个文件。然后,任何其他有权访问该文件的进程都可以使用正常的open
系统调用打开该文件以进行读取或写入。
【讨论】:
感谢您的回答!我只想要每个管道一个源和一个目标,但我希望总体上有很多管道,并且每个程序都有很多管道。管道是使用 FIFO 之类的文件系统还是使用内存? @JoeCoderGuy 仅在创建 fifo 时 mkfifo 需要该文件(因此接收进程知道要打开什么),然后按照正常管道 - 数据通过 fifo(或管道) 不需要通过磁盘。 @JoeCoderGuy 如果两个进程完全独立,即两个不同的程序,则必须使用mkfifo
来创建命名管道,因为pipe
系统调用只会创建内存中的管道.另一方面,如果您fork
是新进程,那么这两个进程是相关的,那么在fork
之前执行pipe
调用是可以的,因为在执行fork
时会继承文件描述符。以上是关于管道“地址系统”的主要内容,如果未能解决你的问题,请参考以下文章