为了账号安全,请及时绑定邮箱和手机立即绑定

作业社区

探索学习新天地,共享知识资源!

0 提交作业
0 布置作业
0 满分作业
得分 100
学习任务

城仔 的学生作业:

#include #include #include #include #include #include #define buffer_size 1024 int main(void) { pid_t cpid; int ret; int pipefd[2];//管道文件描述符,pipefd[0]为读端,pipefd[1]为写端 ret = pipe(pipefd); //创建管道之后,内核会将文件描述存储到数组中 if(ret == -1){ perror("[error] pipe(): "); exit(EXIT_FAILURE); } cpid = fork(); if(cpid == -1){ perror("[error] fork(): "); close(pipefd[0]); close(pipefd[1]); exit(EXIT_FAILURE); }else if(cpid == 0){ ssize_t rbytes; char buffer[buffer_size] = {0}; close(pipefd[1]); //关闭子进程写端文件描述符 printf("从管道获取数据\n"); while(rbytes = read(pipefd[0],buffer,buffer_size -1) > 0){ buffer[rbytes] = '\0'; printf("读取到数据: %s\n",buffer); memset(buffer,0,buffer_size); } if(rbytes == -1){ perror("[error] read(): "); close(pipefd[0]); exit(EXIT_FAILURE); } printf("管道写端关闭\n"); close(pipefd[0]); exit(EXIT_SUCCESS); }else if(cpid > 0){ ssize_t wbytes; char input_buffer[buffer_size] ={0}; close(pipefd[0]);//关闭父进程读端 printf("请输入数据,输入quit推出 \n"); while(fgets(input_buffer,buffer_size,stdin) != NULL){ input_buffer[strcspn(input_buffer,"\n")] = '\0'; if(strcmp(input_buffer,"quit") == 0){ printf("退出!"); break; } ssize_t wbytes = write(pipefd[1],input_buffer,strlen(input_buffer)); if(wbytes == -1){ perror("[error] write(): "); wait(NULL); close(pipefd[1]); exit(EXIT_FAILURE); } memset(input_buffer,0,buffer_size); } close(pipefd[1]); wait(NULL); printf("程序退出!\n"); } return 0; } 【图片】

微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号