2、管道(无名管道):
a、只能用于具有亲缘关系的进程之间通信;
b、半双工模式,具有固定的读端和写端;
c、管道不是普通文件,不属于任何文件系统,只存在于内存中;
d、当一个管道通过函数 int pipe(int fd[2]) 创建时,fd[0] 为固定的读端,fd[1] 为固定的写端;
e、对管道的读写,其实就是对内核缓冲区的读写;
注意:
I、 如果所有指向该管道读端的文件描述符都已经关闭,而写端继续写,则会收到SIGPIPE信号,通常会导致进程异常终止;
II、 如果所有指向该管道写端的文件描述符都已经关闭,而读端继续读,则读端会继续读取完毕管道中的内容,读完后再次读取的时候,就会返回0 ,就像读到文件末尾一样;
III、如果指向该管道的文件的读端和写端都没有关闭,但是写端没有向管道中写入数据,这时,读端会继续读取管道中剩余的数据,读取完毕后,阻塞等待,直到管道中再有数据;
IIII、如果指向该管道的读端和写端都没有关闭,但是读端不读取任何数据,而写端不断写入数据,当管道被写满时,就会阻塞等待;
3、标准流管道:
带有缓冲区
函数: FILE* popen(char* command ,char* type);
int pclose(FILE* stream);
command 指的是路径+文件名;
type表示的是读写方式,只能是其中一种方式,不能读写同时进行,当参数是两个时,只取第一个的值;
wait4()被 pclose(FILE* stream)调用,等待管道进程运行结束,然后关闭文件流;
本文出自 “10891086” 博客,请务必保留此出处http://10901086.blog.51cto.com/10891086/1917532
原文地址:http://10901086.blog.51cto.com/10891086/1917532