zoukankan      html  css  js  c++  java
  • 有名管道fifo

    mkfifo函数使用
    [code]mkfifo(建立实名管道)
    相关函数
    pipe,popen,open,umask
    表头文件
    #include<sys/types.h>
    #include<sys/stat.h>
    定义函数
    int mkfifo(const char * pathname,mode_t mode);
    函数说明
    mkfifo ()会依参数pathname建立特殊的FIFO文件,该文件必须不存在,而参数mode为该文件的权限(mode%~umask),因此 umask值也会影响到FIFO文件的权限。Mkfifo()建立的FIFO文件其他进程都可以用读写一般文件的方式存取。当使用open()来打开 FIFO文件时,O_NONBLOCK旗标会有影响
    1、当使用O_NONBLOCK 旗标时,打开FIFO 文件来读取的操作会立刻返回,但是若还没有其他进程打开FIFO 文件来读取,则写入的操作会返回ENXIO 错误代码
    2、没有使用O_NONBLOCK 旗标时,打开FIFO 来读取的操作会等到其他进程打开FIFO文件来写入才正常返回。同样地,打开FIFO文件来写入的操作会等到其他进程打开FIFO 文件来读取后才正常返回。
    返回值
    若成功则返回0,否则返回-1,错误原因存于errno中。
     
     
    使用有名管道十分简单:你如同使用一个普通文件一样打开它,用read()和 write()进行操作。但对管道使用open()时可能引起阻塞,下面一些常用规律可以参考:
      • 如果你同时用读写方式(O_RDWR)方式打开,则不会引起阻塞。
      • 如果你用只读方式(O_RDONLY)方式打开,则open()会阻塞一直到有写方打开管道, 除非你指定了O_NONBLOCK,来保证打开成功。
      • 同样以写方式(O_WRONLY)打开也会阻塞到有读方打开管道,不同的是如果 O_NONBLOCK被指定open()会以失败告终。
     
     
     
    在读写有名管道之前需要用open函数打开该有名管道,打开有名管道操作与其他文件有一定的区别,如果希望打开管道的写端,则需要另一个进程打开该管道的读端,如果只打开有名管道的一端,则系统将暂时阻塞打开进程,直到另一个进程打开管道的另一端,当前进程才会继续执行,因此,在使用有名管道时一定要使用两个进程分别打开其读端和写端!
  • 相关阅读:
    2019.7.17东湖大数据页面三
    2019.7.17东湖大数据页面二
    2019.7.17东湖大数据页面一
    css的使用方法和css选择器
    css定位和浮动
    form表单的理解及用法
    CSS中路径及form表单的用法
    关于新手html的认识 以及对table的基本用法
    网络编程和并发34题
    爬虫day01
  • 原文地址:https://www.cnblogs.com/nufangrensheng/p/2941251.html
Copyright © 2011-2022 走看看