netdoger 发表于 2016-07-21 10:38

请问:管道的问题

我们在使用匿名管道时,一般都是这样的:
int fd;
pipe(fd);//创建一个管道
fork();
请问:在fork后,为什么父、子进程
不会复制管道?如果复制了,那么
父、子进程都会有各自的管道了。
请问fork函数为什么没有被复制?

folklore 发表于 2016-07-21 12:04

因为管道不是进程的一部分(不在内存空间中),
正如你打开一个文件, fork后[@]文件自身[/@]不会变成两个,
但指向文件的Handle变成两个(每个进程一个)了(指向同一个文件)。

netdoger 发表于 2016-07-21 16:08

folklore 发表于 2016-07-21 12:04 static/image/common/back.gif
因为管道不是进程的一部分(不在内存空间中),
正如你打开一个文件, fork后[@]文件自身[/@]不会变成两个 ...
管道不是进程的一部分(不在内存空间中)?请问管道在哪?

zylthinking 发表于 2016-07-21 16:27

回复 1# netdoger

谁说没有复制;
一般用法:
pipe();
fork();
if (father) {
   close(pipe;
} else {
    close(pipe);
}

没有复制的话, 你觉得子进程里的 pipe 哪里来的?
   

lxyscls 发表于 2016-07-21 16:31

要复制,不复制管道命令怎么玩?

cjfeii 发表于 2016-07-21 17:49

管道只有一个,但是句柄复制了一份,即主进程和子进程都有这个匿名管道的一份句柄。

cjfeii 发表于 2016-07-21 17:52

这个比较常用的进程通信模式。
这个管道是半双工的。
一般是这样的通讯方式:主进程往管道里面只写(or 读),子进程只读(or 写)。
页: [1]
查看完整版本: 请问:管道的问题