一起talk C栗子吧(第八十九回:C语言实例--使用管道进行进程间通信二)
2016-01-03 22:41
363 查看
各位看官们,大家好,上一回中咱们说的是使用管道进行进程间通信的例子,这一回咱们说的例子是:使用管道进行进程间通信,不过使用管道的方式不相同。闲话休提,言归正转。让我们一起talk C栗子吧!
我们在前面章回中介绍了三种管道,这一回我们介绍第二种管道及其使用方法。最主要还是让大家明白如何使用管道进行进程间的通信。
第二种管道我称之为入门级管道。在介绍它之前,我们先介绍一个函数:pipe.
该函数用来创建管道,并且得到两个文件描述符供我们使用;
该函数只有一个参数,参数为int类型的数组,数组中有两个元素。两个元素都是文件描述符;
管道通过第二个元素指向的文件把数据写入管道,并且通过第一个元素指向的文件从管道中读取数据;
该函数执行成功时返回0,否则返回-1,并且修改errno的值,不同的值代表不同的错误。
1.使用pipe函数创建管道,并且得到两个文件描述符;
2.在子进程中使用write系统调用通过第二个文件描述符向管道中写入数据;
3.在父进程中使用read系统调用通过第一个文件描述符从管道中读取数据;
我们接下来使用具体的例子进行说明,下面是详细的代码:
从上面的代码中我们可以看到:
首先是在子进程中使用write向管道中写入数据,写入数据是通过第二个文件描述符来实现的。
接着在父进程中使用read从管道中读取数据,读取数据是通过第一个文件描述符来实现的。
在父进程中我们还使用了wait来同步进程,以确保子进程向管道中写入数据后,父进程再从管道中读取数据。
看官们,正文中就不写代码了,详细的代码放到了我的资源中,大家可以点击这里下载使用。
下面是程序的运行结果,请大家参考:
各位看官,关于使用管道进行进程间通信的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。
我们在前面章回中介绍了三种管道,这一回我们介绍第二种管道及其使用方法。最主要还是让大家明白如何使用管道进行进程间的通信。
第二种管道我称之为入门级管道。在介绍它之前,我们先介绍一个函数:pipe.
pipe函数的原型
[code]int pipe(int file_descriptor[2])
该函数用来创建管道,并且得到两个文件描述符供我们使用;
该函数只有一个参数,参数为int类型的数组,数组中有两个元素。两个元素都是文件描述符;
管道通过第二个元素指向的文件把数据写入管道,并且通过第一个元素指向的文件从管道中读取数据;
该函数执行成功时返回0,否则返回-1,并且修改errno的值,不同的值代表不同的错误。
pipe函数的使用方法
明白这个函数后,我们接下来介绍入门级管道的使用方法,详细内容如下:1.使用pipe函数创建管道,并且得到两个文件描述符;
2.在子进程中使用write系统调用通过第二个文件描述符向管道中写入数据;
3.在父进程中使用read系统调用通过第一个文件描述符从管道中读取数据;
我们接下来使用具体的例子进行说明,下面是详细的代码:
[code]int main() { char input[] = "IPC by pipe"; char output[BUFSIZ+1]; int fd_pipe[2]; int count = 0; int stat_value; pid_t pid,pid_res; memset(output,'\0',sizeof(output)); if(pipe(fd_pipe) == 0) //创建管道 { pid = fork(); if(pid > 0) { pid_res = wait(&stat_value); if(pid_res > 0) { count = read(fd_pipe[0],output,BUFSIZ); //从管道中读取数据 printf("father process read %d characters,they are: %s \n",count,output); } } else if(pid == 0) { count = write(fd_pipe[1],input,strlen(input)); //向管道中写入数据 printf("son process write %d characters,they are : %s \n",count,input); } else { printf("create process failed \n"); return 1; } } return 0; }
从上面的代码中我们可以看到:
首先是在子进程中使用write向管道中写入数据,写入数据是通过第二个文件描述符来实现的。
接着在父进程中使用read从管道中读取数据,读取数据是通过第一个文件描述符来实现的。
在父进程中我们还使用了wait来同步进程,以确保子进程向管道中写入数据后,父进程再从管道中读取数据。
看官们,正文中就不写代码了,详细的代码放到了我的资源中,大家可以点击这里下载使用。
下面是程序的运行结果,请大家参考:
[code]./s //运行编译后的程序 son process write 11 characters,they are : IPC by pipe //子进程向管道中写入数据 father process read 11 characters,they are: IPC by pipe //父进程从管道中读取数据
各位看官,关于使用管道进行进程间通信的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。
相关文章推荐
- c语言typedef剖析
- ubuntu gcc/g++ 升级到4.8 支持C++11
- 不相交集--C语言实现
- C语言零基础入门—Hello, World!
- 简单选择排序(Simple Selection Sort)的C语言实现
- 堆排序(Heap Sort)的C语言实现
- 快速排序(Quick Sort)的C语言实现
- 2-路插入排序(2-way Insertion Sort)的C语言实现
- 折半插入排序(Binary Insertion Sort)的C语言实现
- 直接插入排序(Straight Insertion Sort)的C语言实现
- C语言内存管理:malloc、calloc、free的实现
- 总结文件操作函数-文件夹(三)-C语言
- 关于binary diff / patch 差分补丁工具的那些事
- C语言-函数指针
- 算法导论学习---红黑树具体解释之插入(C语言实现)
- 验证尼科彻斯定理
- ImmDisableIME在xp下的bug
- C++ 知识点
- C++里面的inl文件
- C++ 中 stack和queue使用方法