文章目录
- 进程间通讯(IPC机制)有哪几种方式?
- 1、管道
- 有名管道
- 无名管道
- 2、信号量
进程间通讯(IPC机制)有哪几种方式?
管道、信号量、共享内存、消息队列、套接字
1、管道
什么是管道?
有名管道
有名管道可以在任意两个进程之间通信。
有名管道的创建两种方式:1、命令创建:mkfifo FIFO、2、系统调用创建。
1、命令创建:mkfifo FIFO
2、创建两个文件:
a.c 向管道文件中写入数据
b.c 从管道文件中读取数据
运行结果:
注:当管道中没有数据,read阻塞
无名管道
无名管道主要应用于父子之间的通信
1、无名管道的创建
运行结果
管道通信的特点:
1.管道:半双工(某一端只能进行数据的发送,或者数据的接受)、 套接字:全双工(某一端既可以发送数据也可以接受数据)
2、管道没有数据, read阻塞;
3、管道的写端关闭,read返回0;
4、管道的读端关闭,写端产生异常(发送信号,SIGPIPE,程序收到信号,异常终止)
文件描述符:
1.dup(fd):将fd复制一份,分配给文件表中未被使用最小项
2.dup(fd,2)
2、信号量
信号量:多个进程 访问相同资源发生多少能冲突 (红路灯)
同步进程:同一时刻,只能有一个进程访问资源
特殊变量(信号量) 值 >= 0 值可用资源数目
p操作:获取资源 -1
v资源:释放资源 +1
临界资源:同一时刻,只允许一个进程访问资源
临界区: 访问临界资源的代码段