请问:管道的问题
我们在使用匿名管道时,一般都是这样的:int fd;
pipe(fd);//创建一个管道
fork();
请问:在fork后,为什么父、子进程
不会复制管道?如果复制了,那么
父、子进程都会有各自的管道了。
请问fork函数为什么没有被复制? 因为管道不是进程的一部分(不在内存空间中),
正如你打开一个文件, fork后[@]文件自身[/@]不会变成两个,
但指向文件的Handle变成两个(每个进程一个)了(指向同一个文件)。 folklore 发表于 2016-07-21 12:04 static/image/common/back.gif
因为管道不是进程的一部分(不在内存空间中),
正如你打开一个文件, fork后[@]文件自身[/@]不会变成两个 ...
管道不是进程的一部分(不在内存空间中)?请问管道在哪? 回复 1# netdoger
谁说没有复制;
一般用法:
pipe();
fork();
if (father) {
close(pipe;
} else {
close(pipe);
}
没有复制的话, 你觉得子进程里的 pipe 哪里来的?
要复制,不复制管道命令怎么玩? 管道只有一个,但是句柄复制了一份,即主进程和子进程都有这个匿名管道的一份句柄。 这个比较常用的进程通信模式。
这个管道是半双工的。
一般是这样的通讯方式:主进程往管道里面只写(or 读),子进程只读(or 写)。
页:
[1]