Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在执行fork()命令后创建管道时,会发生什么情况?_C - Fatal编程技术网

C 在执行fork()命令后创建管道时,会发生什么情况?

C 在执行fork()命令后创建管道时,会发生什么情况?,c,C,那你们有两根管子吗?当父进程将某些内容写入管道时,子进程是否可以读取它 如果在分叉之前创建管道,会有什么不同 当我试着解决它时,它只是把我的数据弄乱了,我想从子进程传输到父进程,我得到了一些crzy符号而不是整数。如果在fork()之后创建一个管道,在子进程和父进程中,都有两个管道-一个在子进程中,一个在父进程中。每个流程都拥有各自管道的两端。两个管道都未连接到子进程和父进程,并且两个进程都无法通过其拥有的管道与另一个进程通信 如果在fork()之前创建一个管道,则有一个管道,每个进程(父进程和

那你们有两根管子吗?当父进程将某些内容写入管道时,子进程是否可以读取它

如果在分叉之前创建管道,会有什么不同


当我试着解决它时,它只是把我的数据弄乱了,我想从子进程传输到父进程,我得到了一些crzy符号而不是整数。

如果在
fork()
之后创建一个管道,在子进程和父进程中,都有两个管道-一个在子进程中,一个在父进程中。每个流程都拥有各自管道的两端。两个管道都未连接到子进程和父进程,并且两个进程都无法通过其拥有的管道与另一个进程通信

如果在
fork()
之前创建一个管道,则有一个管道,每个进程(父进程和子进程)都有一个引用管道两端的文件描述符(因为子进程自然继承父进程的文件描述符)。在这种情况下,进程可以通过写入/读取管道的另一端来进行通信


通常的做法是,如果要创建一个管道以在子进程和父进程之间通信,请在分叉之前创建管道,并在每个进程中关闭管道的一个(不同)端。由于管道通常是单向的,因此允许进程之间的单向通信。如果需要双向通信,可以使用套接字(通过
socketpair
),或创建两个管道(分叉前)。

在分叉前创建管道。管道在逻辑上被认为是单向通道,因此一端关闭管道的读取端,另一端关闭写入端。如果你需要一个双向通道,使用一个插座对代替。请纠正我,如果我错了。如果在fork()之后创建管道,则无法使用管道在两个进程之间进行通信。@QickdmGdombu没错,您不能。有两个管道在进程之间不以任何方式共享。