进程间通信预习(二)
来源:互联网 发布:淘宝如何添加宝贝规格 编辑:程序博客网 时间:2024/06/17 02:06
1.类UNIX的IPC解决方案
由于历史的原因,在类UNIX系统的发展中,不同的团队发展出了不同的解决方案。这些解决方案被Linux系统兼收并蓄,并经过改造,形成了支持最广泛的解决方案。
2.Linux系统的IPC接口
Linux系统的IPC接口主要由System V IPC,POSIX IPC以及BSD Socket构成。
BSD Socket
socket不仅可以用于同一主机上的各个进程之间的通信,更主要的是可以用于不同主机间的网络通信。
System V IPC
System V IPC接口是由AT&T的贝尔实验室发展出来的,其通信机制主要包括管道、FIFO、消息队列,信号量、共享内存等。
POSIX IPC
由于UNIX的分支版本众多,为了提高应用程序的可移植性,IEEE制定了POSIX。POSIX IPC主要包括消息队列、信号量、共享内存等。
3.管道
当从一个进程连接数据流到另一个进程时,使用术语管道(pipe)。通常是把一个进程的输出通过管道连接到另一个进程的输入。
对于shell命令来说,命令的连接是通过管道字符来完成的:
cmd1 | cmd2
这实际上是把一个进程的输出直接传递给另一个进程的输入。具体地讲:
cmd1的标准输入来自终端键盘。
cmd1的标准输出传递给cmd2,作为它的标准输入。
cmd2的标准输出连接到终端屏幕。
4.pipe()系统调用
利用popen函数运行一个程序时,它首先启动shell,即系统中的sh命令,然后将command字符串作为一个参数传递给它。
pipe()是一个底层函数,通过pipe()在两个进程之间传递数据时不需要启动一个shell来解释请求的命令,此外,该函数还提供了对读写数据的更多控制。
pipe()的原型如下:
#include <unistd.h>
int pipe(int filedes[2]);
该函数在数组中填上两个新的文件描述符后返回0,若出错则返回-1并设置errno的值。
管道关闭后的读操作
当没有数据可读时,read调用通常会阻塞,即它将暂停进程来等待直到有数据到达为止。
如果管道的另一端已被关闭,也就是说,没有进程打开这个管道并向它写数据了,这时进行read调用将返回0而不是阻塞。这就使读进程能够像检测文件结束一样,对管道进
行检测并作出相应的动作。
如果通过fork使用管道,就会有两个不同的文件描述符可以用于向管道写数据,一个在父进程中,一个在子进程中。只有把父子进程中的针对管道的写文件描述符都关闭,管
道才会被认为是关闭了,对管道的read调用才会失败。
- Linux进程间通信预习(二)
- 进程间通信预习(二)
- Linux - C通信间进程(预习内容二)
- 进程间通信预习(一)
- Liunx - C通信间进程(预习内容一)
- Linux - C进程间通信(预习内容三)
- Linux - C进程间通信(预习内容四)
- Linux - C进程间通信(预习内容五)
- Linux - C进程间通信(预习内容六)
- Linux - C进程间通信(预习内容七)
- Linux - C进程间通信(预习内容八)
- Linxu - C进程间通信(预习内容九)
- Linux - C进程间通信(预习内容十)
- 进程间通信方式预习1
- 进程间通信方式预习2
- 预习进程间通信方式1
- Linux下进程通信预习(一)
- Linux进程预习二
- 文章标题
- 机器学习日记12月7日
- Linux 链接详解----动态链接库
- 【数据结构】二叉树的线索化!!
- 【数据结构】外部排序总结 + 构建败者树 Python 版
- 进程间通信预习(二)
- linux上部署安装MySQL5.6.23
- Linux进程间通信
- RAC其中一个节点监听没有起来的解决方案【ora.LISTENER.lsnr INTERMEDIATE】
- Excel_数据透视表_合并单元格
- python 之冒泡排序
- 购物车
- undo_retention设置以及优化
- 阶乘因式分解