gpt4 book ai didi

c - 使用共享内存实现管道

转载 作者:行者123 更新时间:2023-11-30 17:55:21 30 4
gpt4 key购买 nike

我正在使用共享内存实现一个管道。我应该只编写和触摸库,而不是 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]);
}

在这个例子中,我们看到 child 关闭了他的两个 fd,但是父亲陷入了无限循环,并且永远不会关闭他的 fd。在这种情况下,我的管道应该仍然存在(与所有写入 fd 都关闭,或者所有读取 fd 都关闭,或者全部关闭,因此管道应该死亡的情况相比)。

正如我之前所说,我只编写库(shared_memory_pipe.h)。那么,在库内部,我如何知道是否已创建 fork()

我如何知道有另一个进程对我的共享内存管 Prop 有读/写端,以便我知道关闭/不关闭我的共享内存管道?

我听说有一个命令知道有一个 fork() 或类似的东西,但我没有找到它,我也不知道它。

先谢谢了!请询问您是否需要更多信息。

最佳答案

在任何 fork 之前,父进程可以将 getpid() 的结果存储到全局 pid_t pid_parent 中。

稍后,进程可以再次使用 getpid()pid_parent 进行测试。

如果 getpid() 的结果与 pid_parent 不同,则该进程距父进程至少有一个 fork() 距离。

关于c - 使用共享内存实现管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14400289/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com