实验五进程间通信实验(二).doc

实验五进程间通信实验(二).doc

ID:62048371

大小:88.50 KB

页数:7页

时间:2021-04-16

实验五进程间通信实验(二).doc_第1页
实验五进程间通信实验(二).doc_第2页
实验五进程间通信实验(二).doc_第3页
实验五进程间通信实验(二).doc_第4页
实验五进程间通信实验(二).doc_第5页
资源描述:

《实验五进程间通信实验(二).doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、个人收集整理勿做商业用途实验五进程间通信实验(二)实验目的:1.通过基础实验,基本掌握无名管道、有名管道的程序设计。2.通过编写程序,使读者掌握信号处理程序设计方法。实验内容:1.无名管道程序设计:在父进程中创建一个无名管道,并创建子进程;在父进程中写该管道,并用子进程将内容读出。2.有名管道程序设计:创建两个进程,在A进程中创建一个有名管道,并向其写入数据,通过B进程从有名管道中读出数据。3.信号处理程序设计:在进程中为SIGBUS注册处理函数,并向该进程发送SIGBUS信号来触发信号处理函数。实验过程:(一)无名

2、管道程序设计实验代码:/*pipe.c*/#include<unistd.h>#include <sys/types.h>#include #include #include#include <string.h>#defineMAX_DATA_LEN256#define DELAY_TIMEﻩ1int main(){pid_tpid;ﻩintpipe_fd[2];ﻩchar buf[MAX_DATA_LEN];ﻩconst char data[]= "Pipe 

3、TestProgram";ﻩintreal_read,real_write;ﻩﻩmemset((void*)buf,0,sizeof(buf));ﻩﻩ/*创建管道*/ﻩif(pipe(pipe_fd)<0){个人收集整理勿做商业用途ﻩprintf("pipecreate errorn");ﻩexit(1);}ﻩﻩ/*创建一子进程*/ﻩif((pid= fork())==0){ﻩ/*子进程关闭写描述符,并通过使子进程暂停1秒等待父进程已关闭相应的读描述符*/ﻩﻩclose(pipe_fd[1]);ﻩsleep(DEL

4、AY_TIME *3);ﻩﻩﻩ/*子进程读取管道内容*/ﻩif((real_read=read(pipe_fd[0],buf,MAX_DATA_LEN))> 0)ﻩ{ﻩﻩprintf("%dbytes readfromthepipeis'%s'",real_read,buf);ﻩ}ﻩﻩ/*关闭子进程读描述符 */ﻩclose(pipe_fd[0]);ﻩexit(0);}ﻩelseif(pid > 0)ﻩ{/* 父进程关闭读描述符,并通过使父进程暂停1秒等待子进程已关闭相应的写描述符 */ﻩclose(pipe_f

5、d[0]);sleep(DELAY_TIME);ﻩﻩﻩ/*父进程向管道中写入字符串*/if((real_write=write(pipe_fd[1],data, strlen((const char*)data)))!=-1)ﻩﻩ{ﻩprintf("Parentwrote%dbytes :'%s'\n",real_write, data);}ﻩﻩ/*关闭父进程写描述符*/ﻩclose(pipe_fd[1]);ﻩﻩ/*收集子进程退出信息*/ﻩwaitpid(pid,NULL,0);exit(0);ﻩ}}将该程序编译,运

6、行。#./pipe……(二)有名管道程序设计个人收集整理勿做商业用途1.编写一个应用程序,包含两个程序,一个用于读管道,一个用于写管道。其中在读管道的程序里创建管道,并且作为main()函数里的参数由用户输入要写入的内容。读管道的程序会读出用户写入到管道的内容,这两个程序采用的是阻塞式读写管道模式。实验代码:(1)写管道的程序/* fifo_write.c */#include#include#include<errno.h>#include#inc

7、lude<stdio.h>#include <stdlib.h>#include<limits.h>ﻩ#defineMYFIFOﻩ"/tmp/myfifo"ﻩ/*有名管道文件名*/#define MAX_BUFFER_SIZEﻩPIPE_BUF/*定义在于limits.h中*/ﻩintmain(intargc,char*argv[])/*参数为即将写入的字符串*/{ﻩintfd;ﻩcharbuff[MAX_BUFFER_SIZE];intnwrite;ﻩﻩif(argc<=1){printf("Usage:./fif

8、o_writestringn");ﻩexit(1);ﻩ}ﻩsscanf(argv[1], "%s", buff);ﻩ/* 以只写阻塞方式打开FIFO管道 */ﻩfd=open(MYFIFO,O_WRONLY);ﻩif (fd==-1)ﻩ{ﻩprintf("Openfifofileerror\n");ﻩexit(1);ﻩ}/*向管道中写入字符串

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。