管道和FIFO的深入解析与应用
1. 管道和FIFO的基本特性
在管道(pipe)或命名管道(FIFO)的场景中,内核会维护一个引用计数,记录指向该管道或FIFO的打开描述符数量。因此,客户端或服务器都可以调用 unlink 函数,且不会有问题。虽然该函数会从文件系统中移除路径名,但这不会影响之前已经打开该路径名的描述符。然而,对于其他形式的进程间通信(IPC),如System V消息队列,没有这样的计数器。如果服务器在向队列写入最后一条消息后删除该队列,那么当客户端尝试读取最后一条消息时,队列可能已经不存在了。
要运行客户端和服务器程序,可以先在后台启动服务器:
% server-fifo &
然后启动客户端。或者,也可以只启动客户端,让它通过调用 fork 和 exec 来启动服务器。客户端还可以通过 exec 函数将两个FIFO的名称作为命令行参数传递给服务器,而不是将它们硬编码在头文件中。但这种情况下,服务器将成为客户端的子进程,此时使用管道也是可行的。
2. 管道和FIFO的额外属性
2.1 设置非阻塞模式
描述符可以通过两种方式设置为非阻塞模式:
1. 在调用 open 时指定 O_NONBLOCK 标志 :例如,图4.20中的第一次 open
超级会员免费看
订阅专栏 解锁全文
11

被折叠的 条评论
为什么被折叠?



