一.管道
无名管道
创建无名管道
int pipe(int pipides[2]);
参数pipides为一个整形数组,下表为2。如果函数执行成功,pipe将存储两个文件描述符于pipedes[0]和pipedes[1]中,它们分别指向管道的两端。如果系统调用失败,将返回-1。
无名管道是单工的,一个管道只能实现从一个进程向另外一个进程发送消息,pipedes[0]是读端,pipedes[1]是写段,两者的角色不能互换,即pipedes[0]必须是读端, pipedes[1]必须是写端。如果需要实现两进程双工通信,需要两个无名管道。
无名管道通信原理如下图所示:
转载链接:
Linux进程间通讯一–无名管道PIPE
有名管道-FIFO
特点
- 有名管道创建在硬盘中,打开在内存中,全双工通讯模式
- 有名管道在数据未读完时,关闭程序再打开,数据不会被保存!!!
- 有名管道遵循先进先出规则
- 有名管道没有读写端之分,就像操作文件一样,read/write就行
创建有名管道
#include<unistd.h>
#include<fcntl.h>
#include<sys/types.h>
//创建有名管道函数:
int mkfifo(const char* filename, mode_t mode);
二、信号
- 特点
- 信号发布
- 信号捕捉
- 信号处理