进程间通信介绍 早期UNIX进程间通信方式 无名信号(pipe) 有名管道(fifo) 信号(signal) System V IPC 共享内存(share memory) 消息队列(message queue) 信号灯集(semaphore set) 套接字(socket) 无名管道特点 无名管道具有以下特点: 只能用于具有亲缘关系的进程之间的通信 单工的通信模式,具有固定的读端和写端 无名管道创建时会返回两个文件描述符,分别用于读写管道 无名管道创建 - pipe #include<unistd.h> int pipe(int pdf[2]); 成功时返回0,失败时返回EOF pdf 包含两个元素的整形数组,用来保存文件描述符 pdf[0]用于读管道,pdf[1]用于写管道 读无名管道 写端存在(至少有一个进程可以通过无名管道写数据) 有数据 read返回实际读取的字节数 无数据 进程读阻塞 写端不存在 有数据 read返回实际读取的字节数 无数据 read返回0 写无名管道 读端存在(至少有一个进程可以通过文件描述符读取管道内容) 有空间 write返回实际写入字节数 无空间 进程写阻塞 读端不存在 有空间 管道断裂! 无空间 管道断裂!