进程之间的通讯之管道
2017-10-24 11:59
274 查看
无名管道
管道的整体(有名、无名)概念:我们通常把一个进程的输出通过一块内存连接到另外一个进程的输入。特征:
1.半双工通讯方式,同一时刻数据只能单向流动。
2.类似于数据结构中的队列,遵循先进先出的原则。
3.管道中的数据具有一次性,一旦被读走,将被从管道中移除。
4.没有具体的文件名标识,所以只能在父子进程中通讯。
5.管道所传送的数据是无格式的,这要求管道的读出方与写入方必须事先约定好数据的格式,如多少字节算一个消息等
下面用图示解释它的创建以及使用:
有名管道
概念上面已经说过。特征:1.有名管道有文件名作为标识符,所以可在任意两个进程之间进行通信
2.创建管道有两种形式:一 ,是在命令窗口使用mkfifo 管道名 二,是代码中调用系统函数mkfifio();之后的操作就把管道看作文件,使用文件操作就好打开: open 写数据:write 读数据:read 关闭:close
3.管道的各个接口会进行阻塞,例如:
如果一个进程以只写打开一个管道,而没有进程对这个管道进行读的权限打开,open就会阻塞到此处。知道有另一个进程以写的权限打开后,open才会执行下去。
read也会阻塞运行。如果其他进程没有给管道写入数据 ,read就会阻塞直至其他进程给管道内写入数据。如果当一个进程以写方式打开管道后,关闭了管道的写端,或者直接结束掉了进程,read不会阻塞,而是会直接返回0。
write虽然也会阻塞运行,但阻塞条件比较难达成,就是管道写满的情况。
管道的大小具体是多少。我们可以简单来测一下。
65536=64K;
相关文章推荐
- 利用管道技术在两个进程之间通讯.
- Linux下进程的创建及其使用管道进行进程之间的通讯[00原创]
- 【转】C++ 进程间的通讯(一):简单的有名管道实现
- 进程之间通讯问题
- linux进程间通讯--管道
- 利用有名管道,实现两个独立进程间的通讯
- Linux-进程间通讯-管道
- 进程间的通讯之有名管道
- 进程间通讯:管道
- linux进程间通讯-匿名管道
- Java使用管道实现进程间通讯
- C#使用命名管道通过网络在进程之间进行通信
- 进程之间的通信--管道
- 进程间通讯概述管道通讯信号通讯共享内存
- 命名管道跨进程通讯
- 通过命令管道,在进程之间进行通信的简单例子
- Linux 进程间通讯之有名管道方式
- 进程之间通讯的几种方法
- System.IO系列:局域网内多线程使用命名管道在进程之间通信实例
- C++和C#进程之间通过命名管道