




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验五:进程间通信l 实验目的:学会进程间通信方式:无名管道,有名管道,信号,共享内存l 实验要求:(一)在父进程中创建一无名管道,并创建子进程来读该管道,父进程来写该管道(二)在进程中为SIGBUS注册处理函数,并向该进程发送SIGBUS信号(三)创建一共享内存,实现放进程间通信l 实验器材:软件:安装了Linux的vmware虚拟机硬件:PC机一台l 实验步骤:(一)无名管道的使用1、编写实验代码pipe_rw.c#include #include #include #include #include #include int main()int pipe_fd2;pid_t pid;char buf_r100;char* p_wbuf;int r_num;memset(buf_r,0,sizeof(buf_r);/*创建管道*/if(pipe(pipe_fd)0) /父进程执行代码/1、父进程先关闭了管道的读端 /2、向管道写入字符串数据 /3、关闭写端,并等待子进程结束后退出return 0;2、编译应用程序pipe_rw.c3、运行应用程序子进程先睡两秒让父进程先运行,父进程分两次写入“hello”和“pipe”,然后阻塞等待子进程退出,子进程醒来后读出管道里的内容并打印到屏幕上再退出,父进程捕获到子进程退出后也退出4、由于fork函数让子进程完整地拷贝了父进程的整个地址空间,所以父子进程都有管道的读端和写端。我们往往希望父子进程中的一个进程写一个进程读,那么写的进程最后关掉读端,读的进程最好关闭掉写端(二)信号处理1、编写实验代码sig_bus.c#include #include #include /1、自定义信号处理函数,处理SIGBUS信号,打印捕捉到信号即可int main()printf(Waiting for signal SIGBUS n );/2、注册信号处理函数pause();/将进程挂起直到捕捉到信号为止exit(0);用signal系统调用为SIGBUS信号注册信号处理函数my_func,然后将进程挂起等待SIGBUS信号。所以需要向该进程发送SIGBUS信号才会执行自定义的信号处理函数2、编译应用程序sig_bus.c3、运行应用程序先先一个终端中运行sig_bus,会看到进程挂起,等待信号然后在另一个终端中,查找到运行sig_bus这个产生的进程号,用kill命令发送SIGBUS信号给这个进程我们可以看到前面挂起的进程在接收到这个信号后的处理用自定义信号处理函数my_func来处理,所以打印了I have get SIGBUS这样一句话(3) 共享内存1、 本实验利用共享内存完成两个进程之间的通信,发送端的消息类型设置为该进程的进程号(可以取其他值),接收端接收消息(类似消息队列的功能),这里同时需要采用信号量为同步机制完善两个进程间的通信。2、 下面是共享内存缓冲区的数据结构的定义/* shm_com.h */#ifndefSHM_COM_H#defineSHM_COM_H#include #include #include #include #include #include #include #define SHM_BUFF_SZ 2048struct shm_buffint pid;char bufferSHM_BUFF_SZ;#endif /* SHM_COM_H */以下是发送端的部分程序,请完善信号量的操作代码/* producer.c */#include shm_com.h#include int ignore_signal(void)signal(SIGINT, SIG_IGN);signal(SIGSTOP, SIG_IGN);signal(SIGQUIT, SIG_IGN);return 0;int main()void *shared_memory = NULL;struct shm_buff *shm_buff_inst;char bufferBUFSIZ;int shmid, semid;ignore_signal(); /* 防止程序非正常退出 */* 创建一个信号量*/* 初始值为1 */* 创建共享内存 */shmid = shmget(ftok(., b), sizeof(struct shm_buff), 0666|IPC_CREAT);if (shmid = -1)perror(shmget failed);/删除信号量exit(1);/* 将共享内存地址映射到当前进程地址空间 */shared_memory = shmat(shmid, (void*)0, 0);if (shared_memory = (void*)-1)perror(shmat);/删除信号量exit(1);printf(Memory attached at %Xn, (int)shared_memory);/* 获得共享内存的映射地址 */shm_buff_inst = (struct shm_buff *)shared_memory;doprintf(Enter some text to the shared memory(enter quit to exit):);/* 向共享内存写入数据 */if (fgets(shm_buff_inst-buffer, SHM_BUFF_SZ, stdin) = NULL)perror(fgets);sem_v(semid);break;shm_buff_inst-pid = getpid(); while(strncmp(shm_buff_inst-buffer, quit, 4) != 0);/* 删除信号量 */* 删除共享内存到当前进程地址空间中的映射 */if (shmdt(shared_memory) = 1)perror(shmdt);exit(1);exit(0);以下是接收端程序部分,请完善信号量操作的代码/* customer.c */#include shm_com.hint main()void *shared_memory = NULL;struct shm_buff *shm_buff_inst;int shmid, semid;/* 获得信号量 */* 获得共享内存 */shmid = shmget(ftok(., b), sizeof(struct shm_buff), 0666|IPC_CREAT);if (shmid = -1)perror(shmget);exit(1);/* 将共享内存地址映射到当前进程地址空间 */shared_memory = shmat(shmid, (void*)0, 0); if (shared_memory = (void*)-1)perror(shmat);exit(1);printf(Memory attached at %Xn, (int)shared_memory);/* 获得共享内存的映射地址 */shm_buff_inst = (struct shm_buff *)shared_memory;doprintf(Shared memory was written by process %d :%s, shm_buff_inst-pid, shm_buff_inst-buffer);if (strncmp(shm_buff_inst-buffer, quit, 4) = 0) break;shm_buff_inst-pid = 0;memset(shm_buff_inst-buffer, 0, SHM_BUFF_SZ); while(1);/* 删除共享内存到当前进程地址空间中的映射 */if (shmdt(shared_memory) = -1)perror(shmdt);exit(1);/* 删除共享内存 */if (shmctl(shmid, IPC_RMID, NULL) = -1)perr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中国特色社会主义教育制度规定
- 医生年度考核思想工作总结
- 医疗器械监管工作总结和明年工作思路
- 医院个人年终总结1000字范文
- 家居建材代理售后服务与绿色环保产品认证协议
- 知识产权离职员工离职后合作开发协议
- 离婚协议车辆分割及财产权益明确约定合同
- 电子商务公司实习生电商运营与市场拓展协议
- 票据融资代理合同模板(国际贸易结算)
- 天津二手住宅买卖合同及物业维修基金移交协议
- 四级单词完整版excel
- 电缆沟及盖板作业指导书培训课件
- GB/T 19867.6-2016激光-电弧复合焊接工艺规程
- GB/T 19478-2018畜禽屠宰操作规程鸡
- 三级教育考试卷(焊工)答案
- 无生上课课堂教学评价标准
- 深圳低压电工作业-实际操作培训课件-科目四-作业现场应急处理
- 中控岗位培训课件
- 宾馆酒店前台责任书
- 2.2 第2课时 基本不等式的综合应用(课件)高一数学(人教A版2019必修第一册)
- 勿忘国耻教学课件
评论
0/150
提交评论