unix环境高级编程-进程间通信
2016-08-06 14:52
274 查看
之前说明了进程控制原语,但是这些进程之间交换信息的唯一途径就是传送打开的文件,可以由fork或exec传送,也可以通过文件系统来传送,接下来说明进程之间相互通信的其他技术-进程间通信(IPC)
管道:
管道是unix中IPC最古老的形式,管道有以下几点局限:
1.历史上是半双工的
2.管道只能在具有共同父辈的两个进程间使用。
尽管有这些局限性,半双工管道仍是最常见的IPC形式,每当在管道中键入一个命令序列,让shell执行时,shell都会为每一条命令单独创建一个进程,然后用管道将前一条命令进程的标准输出与后条命令的标准输入相连接。
管道是通过调用pipe函数创建的。
#include <unistd.h>
int pipe(int fd[2]);
经由参数fd返回两个文件描述符:fd[0]为读而打开,fd[1]为写而打开,fd[1]的输出是fd[0]的输入。
下图给出了两周过描述半双工管道的方法。左图显示管道的两端在一个进程相互连接,右图则强调数据需要通过内核在管道中流动。
单个进程中的管道几乎没有任何作用,通常进程会先调用pipe,接着调用fork,从而创建父进程到子进程的IPC通道。下图显示了这种情况
对于从父进程到子进程的管道,父进程关闭管道的读端(fd[0]),子进程关闭写端(fd[1])。对于子进程到父进程的管道,父进程关闭fd[1],子进程关闭fd[0]。
当管道的一端被关闭后,下列两条规则起作用:
1.当读(read)一个写端被关闭的管道时,在所有数据都被读取后,read返回0,表示文件结束。
2.如果写(write)一个读端已经被关闭的管道,则产生信号SIGPIPE。
管道:
管道是unix中IPC最古老的形式,管道有以下几点局限:
1.历史上是半双工的
2.管道只能在具有共同父辈的两个进程间使用。
尽管有这些局限性,半双工管道仍是最常见的IPC形式,每当在管道中键入一个命令序列,让shell执行时,shell都会为每一条命令单独创建一个进程,然后用管道将前一条命令进程的标准输出与后条命令的标准输入相连接。
管道是通过调用pipe函数创建的。
#include <unistd.h>
int pipe(int fd[2]);
经由参数fd返回两个文件描述符:fd[0]为读而打开,fd[1]为写而打开,fd[1]的输出是fd[0]的输入。
下图给出了两周过描述半双工管道的方法。左图显示管道的两端在一个进程相互连接,右图则强调数据需要通过内核在管道中流动。
单个进程中的管道几乎没有任何作用,通常进程会先调用pipe,接着调用fork,从而创建父进程到子进程的IPC通道。下图显示了这种情况
对于从父进程到子进程的管道,父进程关闭管道的读端(fd[0]),子进程关闭写端(fd[1])。对于子进程到父进程的管道,父进程关闭fd[1],子进程关闭fd[0]。
当管道的一端被关闭后,下列两条规则起作用:
1.当读(read)一个写端被关闭的管道时,在所有数据都被读取后,read返回0,表示文件结束。
2.如果写(write)一个读端已经被关闭的管道,则产生信号SIGPIPE。
相关文章推荐
- UNIX环境高级编程学习之第十五章进程间通信 - 系统V 共享内存使用(使用信号灯保护共享内存)
- UNIX环境高级编程-第15章- 进程间通信 - 一
- UNIX环境高级编程(第15章 进程间通信)
- UNIX:高级环境编程 - 第十五章 IPC:进程间通信
- UNIX环境高级编程 第17章 高级进程间通信
- UNIX环境高级编程学习之第十五章进程间通信 - 通过半双工匿名管道实现父子进程通信
- UNIX环境高级编程笔记——高级IO,进程间通信,套接字,高级进程间通信
- Unix环境高级编程(十八)高级进程间通信
- unix环境高级编程-进程间通信(2)
- UNIX环境高级编程学习之第十五章进程间通信 - 通过消息队列实现进程间通信
- unix环境高级编程--进程间通信机制
- UNIX环境高级编程-第17章- 高级进程间通信 - 一
- (十二) 一起学 Unix 环境高级编程 (APUE) 之 进程间通信(IPC)
- UNIX环境高级编程学习之第十五章进程间通信 - 通过有名管道(命名管道)实现进程间通信
- UNIX环境高级编程 第十五章:进程间通信:是指在不同进程之间传播或交换信息
- UNIX环境C语言编程(13)-高级进程间通信
- UNIX环境高级编程 第15章 进程间通信
- UNIX环境高级编程-第15章- 进程间通信 - 二
- UNIX环境高级编程学习之第十五章进程间通信 - 两个进程通过映射普通文件实现共享内存通信
- UNIX环境高级编程学习之第十五章进程间通信 - 信号量的使用(信号灯的使用, 计算信号灯)