当前位置: 技术问答>linux和unix
Linux中管道的使用(父或子进程中能否都保留读写端)
来源: 互联网 发布时间:2017-01-12
本文导语: 最近在看管道相关的操作,管道可用于父子进程间的IPC。 通常情况下,数据流是单向的(半双工),如对于父->子的管道,在父进中要关闭读端(fd[0]),子进程中关闭写端(fd[1])。对于子->父的管道,在父进中要关闭写...
最近在看管道相关的操作,管道可用于父子进程间的IPC。
通常情况下,数据流是单向的(半双工),如对于父->子的管道,在父进中要关闭读端(fd[0]),子进程中关闭写端(fd[1])。对于子->父的管道,在父进中要关闭写端(fd[1]),子进程中关闭读端(fd[0])。
我的问题是,能否在父子进程中对于读写端都不关闭,从而可以实现父子的全双工通讯。
我写了简单的测试代码,输出为:
C
P
kkkkkkkkkkkk
用sleep进行延时,让子进程先执行,由输出看确实先输出了"C",但为何这时,在父进程中的write(fd[1], "tttttt", 6);无效呢?
code:
通常情况下,数据流是单向的(半双工),如对于父->子的管道,在父进中要关闭读端(fd[0]),子进程中关闭写端(fd[1])。对于子->父的管道,在父进中要关闭写端(fd[1]),子进程中关闭读端(fd[0])。
我的问题是,能否在父子进程中对于读写端都不关闭,从而可以实现父子的全双工通讯。
我写了简单的测试代码,输出为:
C
P
kkkkkkkkkkkk
用sleep进行延时,让子进程先执行,由输出看确实先输出了"C",但为何这时,在父进程中的write(fd[1], "tttttt", 6);无效呢?
code:
#include
#include
int main(int argc, char **argv)
{
int fd[2];
pid_t pid;
char get[13];
if(pipe(fd)