• pipe与fifo的总结 转载


    原文地址   http://blog.csdn.net/k_linux_man/article/details/6712279

    pipe总结:

    读端:

      写端开启

         1.管道中有数据,返回读取的字节数。

         2. 无数据,阻塞到有数据。

      写端关闭

         1.管道中有数据,返回读取的字节数。

         2.无数据,返回0

    所以,read返回0意味着写端关闭了。

    写端:

     读端开启

       1.空间足,返回写入的字节数。

       2.空间不足,有多少写多少,直到写完返回。

     读端关闭:进程被SIGPIPE信号终止。 

    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。

    第三 O_RDWR

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

  • 相关阅读:
    iOS构建流畅的交互界面--卡顿产生的原因
    iOS-tableViewCell重用机制带来的问题及解决
    完全背包
    poj1384
    RunLoop的使用--AFNetworking的网络线程实现+tableView延迟加载图片+App崩溃后立即重启
    poj 3624
    01背包
    poj1416
    java中 File文件常用操作方法的汇总
    线程中涉及到的知识点总结
  • 原文地址:https://www.cnblogs.com/yiru/p/2862305.html
Copyright © 2020-2023  润新知