管道就是指用于连接一个读进程和一个写进程,以实现它们之间通信的共享文件,又称pipe文件。x中实现了两种管道,一种是无名管道,一种是命名管道。无名管道没有磁盘节点,它仅作为一个内存对象存在,用完后就销毁了。因为没有文件名和路径,也没有磁盘节点,因此无名管道没有显式的打开过程,实际上它是在创建时就自动打开的,并且生成内存inode节点、dentry目录项对象和两个文件结构对象(一个读操作、一个写操作),其内存对象和普通文件的一致,所以读写操作使用的是同样的文件接口,当然读写函数是专用的。
因为无名管道不能显式打开,因此只能由父子进程之间、兄弟进程之间或者其他有亲缘关系并且都继承了祖先进程的管道文件对象的两个进程间通信使用。命名管道是有文件名和磁盘i节点的,因此可由任意两个或多个进程间通信使用,它的使用方法和普通文件类似,都遵循打开、读、写、关闭这样的过程,但是读写的内部实现和普通文件不同,而和无名管道一样。
管道以先进先出方式保存一定数量的数据。使用管道的时候一个进程从管道的一端写,另一个进程从管道的另一端读。在主进程中利用fork()函数创建一个子进程,这样父子进程同时拥有对同一管道的读写句柄,因为管道没有提供锁定的保护机制,所以必须决定数据的流动方向,然后在相应进程中关闭不需要的句柄。这样,就可以使用read()和write()函数来对它进行读写操作了。
广东鹏宇科技有限公司
18125366669