linux管道通信编程.pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《linux管道通信编程.pdf》由会员分享,可在线阅读,更多相关《linux管道通信编程.pdf(5页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、linux管道通信编程 首先说明linux进程之间通信的主要方式。大型程序大多会涉及到某种形式的进程间通信,一个较大型的应用程序设计成可以相互通信的“碎片”,从而就把一个任务分到多个进程中去。进程间通信的方法有三种方式:1,管道(pipe)2,System v IPC 机制,包括消息队列,信号量,共享内存 3,套接字(socket)管道机制在UNIX开发的早期就已经提供了,它在本机上的两个进程间的数据传递表现的相当出色;套接字是在BSD(Berkeley Software Development)中出现的,现在的应用也相当的广泛;而System V IPC机制Unix System V 版本中
2、出现的。首先讲管道机制,会在以后把其他的通信机制都讲到。管道分为pipe(无名管道)和FIFO(命名管道),它们都是通过内核缓冲区按先进先出的方式数据传输,管道一端顺序地写入数据,另一端顺序地读入数据读写的位置都是自动增加,数据只读一次,之后就被释放。1 ,PIPE无名管道 调用格式为int pipe(int filedes2);,文件描述符filedes0用来读数据,filedes1用来写数据。如果要求程序的可移植性好,就按照习惯的用法来编程。调用成功时,返回值为0;错误时,返回-1,并设置错误代码errno:管道在用户程序看起来就像一个打开的文件,通过r e a d(f i l e d e
3、 s 0 ,v o i d *_ b u f,s i z e _ t _ n y p e s);或者w r i t e(f i l e d e s 1 ,v o i d *_ b u f,s i z e _ t _ n y p e s)向这个文件读写数据其实是在读写内核缓冲区。下面给出实例:#include#include#includeint main(int argc,char*argv)int pipedes2;/pipe输入输出文件描述符 char s13=hello world!;int pid;if(pipe(pipedes)=-1)/创建管道失败 perror(pipe erro
4、r!);exit(EXIT_FAILURE);if(pid=fork()0)/在父进程中 sleep(4);/保证子进程写操作完成 printf(now read data from pipe!n);if(read(pipedes0,s,13)=-1)perror(read error!);exit(EXIT_FAILURE);printf(the data is%sn,s);return 0;运行结果如图:达到预期效果。2,有名管道 无名管道时临时的,在完成通信后就自动消失,且只能在具有亲元关系的进程间实现通信。有名管道他是一个存在的特殊文件,可以在不同的进程间进行通信。用户可以使用shel
5、l来创建有名管道,也可以使用mkfifo函数来创建有名管道,可以使用read和write进行读写操作。下面直接给出操作实例:fifo_read.c/*管道通信:有名管道*无名管道只能用于具有亲缘关系的进程之间,而有名管道可以在互不相关的两个进程间*实现彼此通信。要注意,FIFO严格按照先进先出的规则,对管道及FIFO的读总是从开始*处返回数据,对它们的写则把数据添加到末尾,不支持lseek等文件定位操作。*有名管道的创建使用mkfifo()。创建成功后就可以使用open、read、write这些函数了。*读管道部分*/#include#include#include#include#inclu
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- linux 管道 通信 编程
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内