我想了解一个pipe道的生命周期? http://linux.die.net/man/2/pipe
如果发送者或接收者死亡/退出,pipe道中的数据是否保持活动状态?
如果接收器不存在,是否可以创buildpipe道? (即还没有分叉)?
我需要从发件人发送数据到接收者。 但是,接收器可能还没有被分叉,并且可能在发送者之后的1〜2秒内被激活。 他们共享父进程,但接收者可能会在发送者之后的某个时刻被分叉,反之亦然。
发件人也可以随时完成处理并退出。 我试图看看是否使用pipe道而不是共享内存队列将为我工作。
Win32共享内存的包装类? (进程间通信)
什么函数取代了Win32中的GlobalAlloc?
谁可以在Linux共享共享内存?
通过共享内存IPC在进程之间共享指针
C ++应用程序和Java应用程序在Windows操作系统环境下的进程间通信
在Linux上跨进程共享数据
如何限制共享内存在Linux上的工作
如何处理在VCL应用程序中发布,注册的Windows消息?
管道必须在叉子之前创建。 在fork之后,每个进程使用read或write结束。 在叉子后立即关闭管道未使用的一端是最好的。
如果写入进程退出,读取器可以read管道中的所有剩余数据,但随后的read系统调用将返回0字节读取,这就是如何知道它已经结束。 如果写入过程仍然保持管道打开,但不写入任何东西, read块直到字节可用。
如果写入过程将大量数据写入管道并退出,数据仍可供读者使用。
如果读取过程退出,则写入过程由SIGPIPE信号终止。 它有不同的方式来处理信号的选项,但是它被默认关闭。
所以管道可以活过作者,但不是读者。 概念证明(cső是匈牙利管道):
#include <unistd.h> int main(void) { int cso[2]; pipe(cso); if (fork() == 0) { close(cso[0]); write(cso[1],"cson",4); return 0; } close(cso[1]); sleep(2); if (fork() == 0) { char line[4]; read(cso[0],line,4); write(1,4); return 0; } close(cso[0]); return 0; }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。