C语言无名管道实现父子进程间通信

来源:互联网 发布:淘宝我的仓库在哪里 编辑:程序博客网 时间:2024/06/05 17:54


/***父子进程中管道通信**/#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <string.h>#include <error.h>#include <sys/types.h>#define SIZE 128//缓存区大小char buffer[SIZE];//缓存区int *fd;//文件描述符数组int len;//写入字符串的长度int main(){fd=(int *)malloc(sizeof(int) *2);int ret=pipe(fd);if(ret!=0){perror("pipe error");exit(1);}pid_t pid;pid=fork();int readfd=fd[0];//管道中读int writefd=fd[1];//管道中写if(pid==0){close(readfd);printf("input:");fgets(buffer,SIZE,stdin);//接收输入len=strlen(buffer);//获取字符串长度buffer[len-1]='\0';write(writefd,buffer,len);printf("buffer=%s\n",buffer);memset(buffer,'\0',SIZE);close(writefd);exit(len);}else if(pid!=-1){int ret;int ret_son;wait(&ret_son);if(WIFEXITED(ret_son)){len=WEXITSTATUS(ret_son);}close(writefd);ret=read(readfd,buffer,len);if(ret==-1)//从管道读端读出来{perror("read error");exit(1);}else if(ret==0){printf("写端关闭\n");exit(1);}buffer[ret-1]='\0';printf("data:");printf("%s\n",buffer);close(readfd);}else{perror("fork error");exit(1);}}