用mkfifo在当前目录下建立一个myfifo的有名管道
只运行非阻塞写的程序 open参数为O_WRONLY | O_NONBLOCK
write失败,这是man手册里面说明了的情况
如果open参数为O_RDWR | O_NONBLOCK
写程序则可以立即返回
但是当运行完写程序之后再运行读程序,发现没有从管道里读出任何数据出来。
也就是说管道里面是空的,没有存入任何数据。
写程序中判断了write的返回值,不是-1
如果open参数为O_WRONLY
则为写阻塞
当执行读程序的时候写程序才会返回
当读程序中的open参数为O_RDONLY
这时候是读阻塞
当先运行读程序的时候,写程序是不是阻塞的无所谓,都可以读到数据
但是,非阻塞的写,是没法读到数据的。似乎非阻塞的写没有把数据写入管道中。后面证明,是读需要多次才能读到,这中间存在了一个准备时间之类东西……
设置读程序中open的参数为O_RDWR|O_NONBLOCK
这时候是非阻塞读管道
当没有任何写程序执行的时候read返回-1,错误码是EAGAIN
当写是阻塞写的时候,非阻塞读依然不能读到数据
写的open参数为O_RDWR的时候即为非阻塞写
阻塞读+非阻塞写的组合可以读到数据,先进行读
阻塞读+阻塞写的组合可以读到数据,无所谓谁先运行
非阻塞读+任何写的方法,都不能读到数据
只运行非阻塞写的程序 open参数为O_WRONLY | O_NONBLOCK
write失败,这是man手册里面说明了的情况
如果open参数为O_RDWR | O_NONBLOCK
写程序则可以立即返回
但是当运行完写程序之后再运行读程序,发现没有从管道里读出任何数据出来。
也就是说管道里面是空的,没有存入任何数据。
写程序中判断了write的返回值,不是-1
如果open参数为O_WRONLY
则为写阻塞
当执行读程序的时候写程序才会返回
当读程序中的open参数为O_RDONLY
这时候是读阻塞
当先运行读程序的时候,写程序是不是阻塞的无所谓,都可以读到数据
但是,非阻塞的写,是没法读到数据的。似乎非阻塞的写没有把数据写入管道中。后面证明,是读需要多次才能读到,这中间存在了一个准备时间之类东西……
设置读程序中open的参数为O_RDWR|O_NONBLOCK
这时候是非阻塞读管道
当没有任何写程序执行的时候read返回-1,错误码是EAGAIN
当写是阻塞写的时候,非阻塞读依然不能读到数据
写的open参数为O_RDWR的时候即为非阻塞写
阻塞读+非阻塞写的组合可以读到数据,先进行读
阻塞读+阻塞写的组合可以读到数据,无所谓谁先运行
非阻塞读+任何写的方法,都不能读到数据