APUE-FIFO理解

1.FIFO是一种文件类型。struct stat结构体中st_mode字段指明该文件是否是FIFO类型。可使用宏S_ISFIFO进行测试。

2.FIFO操作函数:mkfifo, open, read, write, close, unlink等对文件进行操作的函数。

  注:打开FIFO时同其他文件一样可以指定打开标识(如非阻塞,默认是阻塞打开),以及文件访问权限。

3.阻塞打开FIFO:只读打开阻塞到有一个进程为写打开此FIFO
                          只写打开阻塞到有一个进程为读打开此FIFO

   注:这里说明的是指打开的时候是否立即返回,那读和写数据的时候,无数据可读可写时应该也会阻塞吧?

4.非阻塞打开FIFO:只读打开立即返回

                             如果没有进程已经为读打开该FIFO,只写打开时出错返回。errno=ENXIO

5.如果写一个无进程读的FIFO,产生信号:SIGPIPE

6.如果有进程关闭了FIFO,将会在该FIFO文件中写入文件结束标识。

7.对FIFO进行原子写操作,写入的最大数据量为PIPE_BUF。使用原子写操作,可以防止写入数据的交叉。

   注:保证一次写入的操作<=PIPE_BUF,该写操作就是原子写操作。

8.FIFO的两种用途:
1)由shell命令使用,将数据从一条管道线传送到另一条,无需为此创建中间临时文件。
      eg:
          mkfifo fifo1         // 创建FIFO
          prog2 < fifo1 &   // fifo的内容作为进程2的输入,后台运行
          prog1 | tee fifo1  // tee命令读取进程1的输出,然后将读取的数据输出到fifo1
2)客户端-服务器使用FIFO进行通信
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值