Pipe管道分为读和写
- 读空Pipe时:
- 写端全关闭,read则返回0,即end-of-file;
- 如果存在写端,且设置了O_NONBLOCK,read返回-1,errno=EAGAIN;
- 如果存在写端,且为阻塞状态,read则阻塞等待;
- 写管道Pipe
- 读端全关闭,进程将异常终止(SIGPIPE);
- 读端存在,且为阻塞状态,如果buf满了,则写阻塞知道Pipe buf被读出数据并存在空间,未满则立刻写入数据,并返回写入的字节数;
- 读端存在,且设置了O_NONBLOCK:
正常写入,并返回写入字节;
写入数据 <= PIPE_BUF,空间足够,返回写入字节数,空间不足,返回-1,errno=EAGAIN;
写入数据 > PIPE_BUF,空间够,则分批写入,知道读完,空间不足,返回-1,errno=EAGAIN;