fifo与pipe总结

fifo总结:全双工方式


第一 O_RDONLY O_WRONLY


  读端open(O_RDONLY…) 写端 open(O_WRONLY…), 只有读或只有写端时,open阻塞。验证,reader和writer    程序,只运行一个。
  写端关闭,只剩下读端时,read立即返回0.
  读端关闭,只剩下写端时,写端被SIGPIPE信号终止。
  

  在一般情况中(没有说明O_NONBLOCK),只读打开要阻塞到某个其他进程为写打开此FIFO。类似,为写而打开一个FIFO要阻塞到某个其他进程为读而打开它。


第二 O_NONBLOCK
  当打开一个FIFO时,非阻塞标志(O_NONBLOCK)产生下列影响:
  对于读端:如果指定了O_NONBLOCK,则只读打开立即返回。

  对于写端:但是,如果没有进程已经为读打开一个FIFO,那么,只写打开将出错返回,其errno是ENXIO:6号


   第三 O_RDWR
  读端和写端都是O_RDWR方式,两端都运行,若写端写完后退出了(输入quit)。则读端是以O_RDWR方式打开的,相当于自己也是一个写端,写端存在,又没东西读,也会阻塞。


pipe总结:半双工方式



读端:

1.写端存在
管道中有数据,返回读取的字节数。
无数据,阻塞到有数据。

2.写端不存在
管道中有数据,返回读取的字节数。
无数据,返回0
所以,read返回0意味着写端关闭了。
写端:
1.读端存在
空间足,返回写入的字节数。
空间不足,有多少写多少,直到写完返回。


2.读端不存在:进程被SIGPIPE信号终止。  

你可能感兴趣的:(Linux系统编程)