无名管道相对于有名管道而言,它不存在管道文件,它实现进程间通信的一般方式是借助父子进程共享fork之前打开的文件描述符,所以无名管道只能应用于父子进程间通讯。
无名管道有两种局限性
- 历史上,无名管道是半双工通信的信道,也就是说,一个进程写的时候,另一个进程只能读,同时只有一个进程进行读,也只有一个进程进行写操作。
- 他们只能在具有公共祖先的进程之间使用,也就是我们所说的父子进程。
创建无名管道的系统调用如下:
该系统调用的参数是一个数组,这个数组是用来接受该函数返回的两个文件描述符,f[0]为读而打开,f[1]为写而打开,使用f[1]写进去的数据,就可以使用f[0]读出来。
用来实现管道的文件并不存在于磁盘或者其他的文件系统存储介质上,而是存在于内存中,也就是说:无名管道的inode被放在内存中