Linux系统编程实验六:进程间通信.docx

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验六:进程间通信 实验目的: 学会进程间通信方式:无名管道,有名管道,信号,消息队列, 实验要求: 在父进程中创建一无名管道,并创建子进程来读该管道,父进程来写该管道 在进程中为 SIGBUS注册处理函数,并向该进程发送 SIGBUS信号 创建一消息队列,实现向队列中存放数据和读取数据 实验器材: 软件:安装了 Linux的vmware虚拟机 硬件:PC机一台 实验步骤: (一)无名管道的使用 1编写实验代码 pipe rw.c #in elude <uni std.h> #in elude <sys/types.h> #in elude <errno .h> #i nclude <stdio.h> #in elude <stri ng.h> #i nclude <stdlib.h> int mai n() { int pipe_fd[2];〃管道返回读写文件描述符 pid_t pid; char buf_r[100]; char* p_wbuf; int r_num; memset(buf_r,0,sizeof(buf_r));〃 将 buf_r 初始化 char str1[]= "parent writel holle ” ” char str2[]= "parent write2 pipe”n” r_num=30; /*创建管道*/ if(pipe(pipe_fd)<0) { prin tf("pipe create error'n ”); return -1; } /*创建子进程*/ if((pid=fork())==0) 〃子进程执行代码 { 〃1、子进程先关闭了管道的写端 close(pipe_fd[1]); 〃2、让父进程先运行,这样父进程先写子进程才有内容读 sleep(2); 〃3、读取管道的读端,并输出数据 if(read(pipe_fd[O],buf_r, r_num)<0) { printf( read error!"); exit(-1); } printf( %s\n",buf_r); 〃4、关闭管道的读端,并退出 close(pipe_fd[1]); } else if(pid>0) //父进程执行代码 { 〃1、父进程先关闭了管道的读端 close(pipe_fd[0]); 〃2、向管道写入字符串数据 p_wbuf= &str1; write(pipe_fd[1],p_wbuf,sizof(p_wbuf)); p_wbuf= &str2; write(pipe_fd[1],p_wbuf,sizof(p_wbuf)); 〃3、关闭写端,并等待子进程结束后退出 close(pipe_fd[1]); } return 0; } /*********************** #in clude <uni std.h> #in clude <sys/types.h> #in clude <errno .h> #i nclude <stdio.h> #in clude <stri ng.h> #i nclude <stdlib.h> int mai n() { int pipe_fd[2];//管道返回读写文件描述符 pid_t pid; char buf_r[100]; char* p_wbuf; int r num; memset(buf_r,0,sizeof(buf_r));〃 将 buf_r 初始化 char str1[]="holle"; char str2[]="pipe"; r_num=10; /*创建管道*/ if(pipe(pipe_fd)<0) { prin tf("pipe create error'n ”); return -1; } /*创建子进程*/ if((pid=fork())==0) 〃子进程执行代码 { close(pipe_fd[1]);//1、子进程先关闭了管道的写端 〃2、让父进程先运行,这样父进程先写子进程才有内容读 〃3、读取管道的读端,并输出数据 if(read(pipe_fd[0],buf_r, r_n um)<0) { prin tf("read1 error!"); exit(-1); } prin tf("\npare nt write1 %s!",buf_r); sleep(1); if(read(pipe_fd[0],buf_r, r_n um)<0) { prin tf("read2 error!"); exit(-1); } prin tf("\npare nt write2 %s!",buf_r); close(pipe_fd[1]);//4、关闭管道的读端,并退出 exit(1); //prin tf("child error!");

文档评论(0)

ailuojue + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档