通过管道实现进程间通信

来源:互联网 发布:阿里云服务器换系统 编辑:程序博客网 时间:2024/06/06 20:03
#include <stdio.h>#include <unistd.h>#define BUF_SIZE 30int main(){int fds[2];char str1[]="Who are you?";char str2[]="Thank you for your message";char buf[BUF_SIZE];pid_t pid;pipe(fds);//fds数组中保存用于I/O的文件描述符pid=fork();//复制的并非管道,而是用于管道I/O的文件描述符if(pid==0)//子进程区域{write(fds[1],str1,sizeof(str1));//sleep(2);//如果注释这行代码,在第19行子进程将读回直接在第17行向管道发送的数据,结果父进程调用read函数后将无限期等待数据进入管道read(fds[0],buf,BUF_SIZE);//这里的buf数组和父进程的buf数组不是同一个printf("Child proc output: %s \n",buf);}else{read(fds[0],buf,BUF_SIZE);printf("Parent proc output: %s \n",buf);write(fds[1],str2,sizeof(str2));//sleep(3);//如果注释这行代码,父进程先终止(会销毁处于僵尸状态的子进程)会弹出命令提示符,这时子进程仍在工作,故不会产生问题。}return 0;}


#include <stdio.h>#include <unistd.h>#define BUF_SIZE 30int main(){char str1[]="Who are you?";char str2[]="Thank you for your message";char buf[BUF_SIZE];int fds1[2],fds2[2];pipe(fds1),pipe(fds2);pid_t pid=fork();if(pid==0){write(fds1[1],str1,sizeof(str1));read(fds2[0],buf,BUF_SIZE);printf("Message from parent:%s\n",buf);}else{read(fds1[0],buf,BUF_SIZE);printf("Message from child:%s\n",buf);write(fds2[1],str2,sizeof(str2));}return 0;}