无名管道

来源:互联网 发布:c语言中x a 3 b a 编辑:程序博客网 时间:2024/04/29 12:01
进程间通信方式:

不同软件和项目对通信方式的要求不一样。必须熟练掌握其中一到两种,剩下的4种要达到知道并能通过手册和资料进行编写。常用的有:消息队列,信号(唯一一种可以实现异步的操作)。

无名管道:
不同进程间的数据交互,每个进程4G空间是相互独立的,当操作相同的内容或对其他信号进行协同时就要用到通信,因为彼此独立。线程间不需要通信机制是因为线程之间共享4G空间。
无名管道是在内核中提供的一块共享空间,供两个进程进行读写。

管道是单双共的,同时读写数据就会出错,网络通信是双共的。


API接口:

pipe执行成功后会在内核中创建一个管道空间,并将两个文件描述符返回给进程。
注意fd[0] 固定读、
fd[1] 固定写。
文件描述符是在进程中的,如果进程间通信,需要两个进程都获取同样的文件描述符,所以这两个进程应该是亲缘关系的进程。


示例与演示分析:
创建子进程采集数据发送给父进程,子进程write,父进程read




管道中的数据是按照文件IO读取的,并不是一个消息一个消息读取的,如果写消息与读消息的数据个数不一定,有可能造成数据 的不一致;
最好写入一个读取同样个数数据,并由开发者控制读写的字节数,对于读写缓存区buf要及时清空。

标准io有缓存区,容易出错,所以有名管道通过文件IO进行操作.
管道读取出的数据和写入的数据顺序是相同的,原样读取,不可以用lseek()定位.
0 0
原创粉丝点击