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

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

ID:55027725

大小:88.50 KB

页数:7页

时间:2020-04-26

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

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

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

2、nistd.h>#include#include#include#include#include#defineMAX_DATA_LEN256#defineDELAY_TIME1intmain(){pid_tpid;intpipe_fd[2];charbuf[MAX_DATA_LEN];constchardata[]="PipeTestProgram";intreal_read,real_write;memset((void*)buf,0,sizeof(b

3、uf));/*创建管道*/if(pipe(pipe_fd)<0){printf("pipecreateerror");exit(1);}/*创建一子进程*/if((pid=fork())==0){/*子进程关闭写描述符,并通过使子进程暂停1秒等待父进程已关闭相应的读描述符*/close(pipe_fd[1]);sleep(DELAY_TIME*3);/*子进程读取管道内容*/if((real_read=read(pipe_fd[0],buf,MAX_DATA_LEN))>0){printf("%dbytesreadfromthepipeis'%s'

4、n",real_read,buf);}/*关闭子进程读描述符*/close(pipe_fd[0]);exit(0);}elseif(pid>0){/*父进程关闭读描述符,并通过使父进程暂停1秒等待子进程已关闭相应的写描述符*/close(pipe_fd[0]);sleep(DELAY_TIME);/*父进程向管道中写入字符串*/if((real_write=write(pipe_fd[1],data,strlen((constchar*)data)))!=-1){printf("Parentwrote%dbytes:'%s'",real_write,

5、data);}/*关闭父进程写描述符*/close(pipe_fd[1]);/*收集子进程退出信息*/waitpid(pid,NULL,0);exit(0);}}将该程序编译,运行。#./pipe……(二)有名管道程序设计1.编写一个应用程序,包含两个程序,一个用于读管道,一个用于写管道。其中在读管道的程序里创建管道,并且作为main()函数里的参数由用户输入要写入的内容。读管道的程序会读出用户写入到管道的内容,这两个程序采用的是阻塞式读写管道模式。实验代码:(1)写管道的程序/*fifo_write.c*/#include#i

6、nclude#include#include#include#include#include#defineMYFIFO"/tmp/myfifo"/*有名管道文件名*/#defineMAX_BUFFER_SIZEPIPE_BUF/*定义在于limits.h中*/intmain(intargc,char*argv[])/*参数为即将写入的字符串*/{intfd;charbuff[MAX_BUFFER_SIZE];intnwrite;if(ar

7、gc<=1){printf("Usage:./fifo_writestring");exit(1);}sscanf(argv[1],"%s",buff);/*以只写阻塞方式打开FIFO管道*/fd=open(MYFIFO,O_WRONLY);if(fd==-1){printf("Openfifofileerror");exit(1);}/*向管道中写入字符串*/if((nwrite=write(fd,buff,MAX_BUFFER_SIZE))>0){printf("Write'%s'toFIFO",buff);}close(fd);exit

8、(0);}(2)读管道的程序/*fifo_read.c*/#include

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

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

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