|
管道的工作模式管道以先进先出模式存储一定数量的数据。使用管道时,一个进程从管道的一端写入,另一个进程从管道的另一端读取。在主进程中,fork()函数用于创建子进程,以便父进程和子进程同时具有对同一管道的读写句柄。由于管道不提供锁定保护机制,因此必须确定数据的流向,然后在相应的过程中关闭不必要的句柄。这样,就可以使用read()和write()函数对其进行读写。使用匿名管道进行进程间通信的步骤概述如下: ① 创建所需的管道; ② 生成(多个)子流程; ③ 关闭/复制文件描述符到管道的对应端; ④ 关闭不必要的管端; ⑤ 开展沟通活动; ⑥ 关闭所有剩余的打开文件描述符 ⑦ 等待子进程完成。 由于read()函数和write()函数对流水线操作有阻塞作用,可以保证一个进程必须先写,然后另一个进程才能读,从而实现父子进程的同步。 |