本文主要是介绍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进行通信
这篇关于APUE-FIFO理解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!