欢迎来到天天文库
浏览记录
ID:35460174
大小:104.11 KB
页数:7页
时间:2019-03-24
《进程间通信实验》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、进程间通信实验8000114134欧阳为软工143Q4:使用无名管道pipe(),进行父子进程之间的通信。A1:截图如下:parentprocesssendsantssagetochild.parentprocessMilsthrchiIdtoicrminaicThenrssagereadbychiIdprocessfromparentis:Antssagetopipe'comninicalion.childprocesstermm3tespareniprocessterminale分析:这段程序使用匿名管道,实现了同一进程组(父子进程间)的通信。首先父进程使用函数pipe()创建一
2、个匿名管道,chan1[]被填入两个文件描述符,在该程序中chan[O]负责读操作,chan[1]负责写操作;创建匿名管道之后使用fork()创建子进程,由于匿名管道是半双工的,即数据只能向一个方向流动,父进程写入数据,子进程读出,如果子进程一直不读出数据,写操作就会阻塞;程序为了保证正确通信,在父进程执行写操作时关闭读管道(close(chan1[0]));子进程读期间,关闭写管道。Q2:以命名行为参数的管道文件的示例。(假设有一个可执行程序chcase,从标准输入设备读字符,将小写字母转化成大写字母并输岀。主程序使用popen创建管道,实现蒋某文本文件中的字幕转化成大写字母,其中
3、的文本文件名作为参A2:截图如下:[root^localhosttestl]#catchcase.c#include#incl.ude#includeintmain(){int1,ten;chars[160];scant(M%sMf&s);len=strlen(s);for(i=6;i4、lltotal128-rwxr厂・x1rootroot5107May1706:12chcase-rw-r-1rootroot228May1706:06chcase.c・rw1rootroot15May1804:12chcase.txtprwxr-xr-x1rootroot0May1723:07-rwxr-xr-x1rootroot5829May1705:18qi・rw-「•-r--1rootroot863May1722:30ql.c-rwxr1rootroot6069May1706:26q2-rw-「•-r--1rootroot837May1706:26q2.c-rwxr-xr-x15、rootroot5695May1722:58q3r--1rootroot700May1722:58q3.c・「・•「・•1rootroot1120May1723:34q4.c-rwxr-xr-x1rootroot5788May1804:32q5・rw-「•-r--1rootroot905May1804:25q5.c一■■亠一■■亠ircr-•r-c■5V••[root@localhostaA[root@localhostABCDEFGHIGKLMN[root@localhosttestl]#./chcasetestl]#・/q2chcase.txttestl]#6、分析:在执行该程序之7、前,首先编译完成字符串大小写转变程序chcase以及文本文件chcase.txto在执行该程序时,文本文件需要作为参数传入;程序首先使用fopen()打开文本文件,若文本文件存在打开成功,则使用popen()函数打开一个管道,popen()函数用创建管道的方式启动一个进程,又因为管道是单向的,所以其type参数只能定义成只读或者只写,如图:fprintf(stderr,upopenerrorN);启动进程为只写,此时popen()创建了一个只写管道,将命令行chcase的输入与管道的输入连接,向管道输入数据,进程chcase读出数据并将数据转化为大写。Q3呛I」建有名管道A3:截8、图如下:[root@localhosttest1]#./q31&[1]7161ihavewrote:thishavewroteuhisihavewrote:vhisihavewrote:whishavewrotexhisihavewrotezyhisihavewrotezzhishavewrotehavewrotehavewrotehavewrotehavewrote:Qhishavewrotezzhishavewrotehavewrotehavewrot
4、lltotal128-rwxr厂・x1rootroot5107May1706:12chcase-rw-r-1rootroot228May1706:06chcase.c・rw1rootroot15May1804:12chcase.txtprwxr-xr-x1rootroot0May1723:07-rwxr-xr-x1rootroot5829May1705:18qi・rw-「•-r--1rootroot863May1722:30ql.c-rwxr1rootroot6069May1706:26q2-rw-「•-r--1rootroot837May1706:26q2.c-rwxr-xr-x1
5、rootroot5695May1722:58q3r--1rootroot700May1722:58q3.c・「・•「・•1rootroot1120May1723:34q4.c-rwxr-xr-x1rootroot5788May1804:32q5・rw-「•-r--1rootroot905May1804:25q5.c一■■亠一■■亠ircr-•r-c■5V••[root@localhostaA[root@localhostABCDEFGHIGKLMN[root@localhosttestl]#./chcasetestl]#・/q2chcase.txttestl]#
6、分析:在执行该程序之
7、前,首先编译完成字符串大小写转变程序chcase以及文本文件chcase.txto在执行该程序时,文本文件需要作为参数传入;程序首先使用fopen()打开文本文件,若文本文件存在打开成功,则使用popen()函数打开一个管道,popen()函数用创建管道的方式启动一个进程,又因为管道是单向的,所以其type参数只能定义成只读或者只写,如图:fprintf(stderr,upopenerrorN);启动进程为只写,此时popen()创建了一个只写管道,将命令行chcase的输入与管道的输入连接,向管道输入数据,进程chcase读出数据并将数据转化为大写。Q3呛I」建有名管道A3:截
8、图如下:[root@localhosttest1]#./q31&[1]7161ihavewrote:thishavewroteuhisihavewrote:vhisihavewrote:whishavewrotexhisihavewrotezyhisihavewrotezzhishavewrotehavewrotehavewrotehavewrotehavewrote:Qhishavewrotezzhishavewrotehavewrotehavewrot
此文档下载收益归作者所有