APUE-FIFO理解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013139008/article/details/79531929

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进行通信

猜你喜欢

转载自blog.csdn.net/u013139008/article/details/79531929