简单的说,管道就是将一个程序的输出和另外一个程序的输入连接起来的单向通道。
当进程创建一个管道的时候,系统内核同时为该进程设立了一对文件句柄(一个流),一个用来从该管道获取数据(read),另一个则用来做向管道的输出(write)。
事实上,在linux系统内核里,每个管道都是用一个inode节点来表示。
fork()的子进程自动继承了父进程打开的文件句柄。利用继承的句柄,就可以实现父/子间的通信了。
1. 由C来建立,使用管道
使用系统函数pipe()来建立管道,它只有一个参数:一个有两个成员的整型数组,用于存放pipe()函数新建立的管道句柄。其函数原型如下:
系统调用: pipe();
函数声明: int pipe( int fd[2] );
返回值: 0 on success
-1 on error: errno = EMFILE (no free descriptors)
EMFILE (system file table is full)
EFAULT (fd array is not valid)
注意: fd[0] 用来从管道中读, fd[1] 用来向管道中写
2.使用dup()函数
有时候我们需要将子进程当中的管道的句柄定向到标准I/O上去。这样,在子进程中使用exec()函数调用外部程序时,这个外部程序就会将管道作为它的输入/输出。这个过程可以用系统函数dup()来实现。其函数原型如下:
系统调用:dup();
函数声明:int dup(int oldfd );
3. 有名管道
为了解决管道不能提供非父子关系进程间通信的缺陷,在管道的基础上发展了有名管道。其存在于文件系统中的文件节点。
分享到:
相关推荐
Socket网络编程学习笔记之---使用线程池提高性能
《LINUX与UNIX SHELL编程指南》读书笔记-二次发布版
学生读书笔记共享-学生读书笔记共享系统-学生读书笔记共享系统源码-学生读书笔记共享管理系统-学生读书笔记共享管理系统java代码-学生读书笔记共享系统设计与实现-基于springboot的学生读书笔记共享系统-基于Web的...
unix网络编程-第三版读书笔记unix网络编程-第三版读书笔记
《技术人的管理之路》读书笔记 --思维导图 《技术人的管理之路》读书笔记 --思维导图 《技术人的管理之路》读书笔记 --思维导图 《技术人的管理之路》读书笔记 --思维导图 《技术人的管理之路》读书笔记 --思维导图 ...
linux socket网络编程笔记自己整理的。
读书笔记----设计模式
flex3读书笔记----flex整合hibernate
学生读书笔记共享-学生读书笔记共享系统-学生读书笔记共享系统源码-学生读书笔记共享管理系统-学生读书笔记共享管理系统java代码-学生读书笔记共享系统设计与实现-基于springboot的学生读书笔记共享系统-基于Web的...
计算机网络设计第一章读书笔记------.pdf该文档详细且完整,值得借鉴下载使用,欢迎下载使用,有问题可以第一时间联系作者~
unix网络编程读书笔记unix网络编程读书笔记unix网络编程读书笔记unix网络编程读书笔记unix网络编程读书笔记
Linux网络编程超级详细笔记
网络营销基础与实践读书笔记---常用网络营销工具和方法.docx
linux内核移植 笔记--移植指令 linux内核移植 笔记--移植指令 linux内核移植 笔记--移植指令
cisco CCNA读书笔记640-802(一)