【发布时间】:2013-01-18 13:47:38
【问题描述】:
我正在使用共享内存实现管道。
我应该只写和触摸图书馆,而不是main()。
我遇到了一个问题:
假设这是某个使用我的库shared_memory_pipe.h 的用户的main():
#include "shared_memory_pipe.h"
int main() {
int fd[2];
shared_memory_pipe(fd);
if (fork()) {
while(1) {}
}
shared_memory_close(fd[0]);
shared_memory_close(fd[1]);
}
在这个例子中,我们看到孩子关闭了他的两个 fd,但父亲陷入了无限循环,并且永远不会关闭他的 fd。在这种情况下,我的管道应该仍然存在(与所有写入 fd 已关闭、所有读取 fd 已关闭或全部已关闭的情况相比,因此管道应该死掉)。
正如我之前所说,我只编写库 (shared_memory_pipe.h)。
那么,在图书馆内部,我怎么知道fork() 是否已经生成?
我怎么知道有另一个进程对我的共享内存管道有读/写端,所以我会知道关闭/不关闭我的共享内存管道?
我听说有一个命令知道有 fork() 或类似的东西,但我没有找到它,我也不知道。
先谢谢了! 如果您需要更多信息,请询问。
【问题讨论】:
标签: c shared-libraries pipe shared-memory