操作系统实验2参考答案
答案
实验 进程和进程通信实验参考答案
(一) 实验题目
父进程输入一个字符,传递给子进程,由子进程得到该字符向后的偏移字符,如果最终字符大于z,那么最终字符显示成a,另外,如果转化成数字字符(0――9),那么进行进程图像转换,执行ls命令!
程序框图如下:
(二) 数据结构说明
除了main()函数以外,还有其他3个函数,一个是signalfun(),是信号SIGUSR1对应的处理函数;一个是writetofile函数,是对一个文件写如一定的内容的函数;还有一个是readfromfile,是从一个文件里面读取内容的函数。子进程的创建都是在main()函数里面!
答案
(三) 测试方法:
黑箱测试法
执行程序结果,输入不同的字符与数字,看输出的结果(在屏幕上有输出)。
(四) 测试结果:
各种输入输出都符合预定的结果!
(五) 实验的步骤:
先运行emacs test_2.C命令,编辑程序代码
然后编译:gcc –o test_2 test_2.C
再反复运行:./test_2
下面是部分测试截图:
答案
(六) 总结与体会:
进程间的通信的方法有很多种,可以通过管道(早期用的比较多)、消息、信号、共享内存等等,通过这些方法,可以实现进程的协作,可以实现计算机间的协作,进而完成复杂的任务。对于这些方法,只有通过实践编程来实现一些具体的功能,才能够有更深刻的理解,才能掌握这些方法!
源代码:
#include "test_2.h"
//信号SIGUSR1的处理函数
void signalfun(int temp)
{
}
//向文件写一定长度的字符串,
void writetofile(char *filename,char *buf,int len)
{
int fd; //用读写的方式打开文件,如果文件没有,创建文件 if ((fd = open(filename,O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR))==-1) { //打开文件失败 } else { //文件打开后,写入内容! } write(fd,buf,len); printf("error open file"); printf("It is signal processing function.\n");
//关闭文件
close(fd);
}
//从文件里读取一定长度的内容,返回值是具体读出的长度
int readfromfile(char *filename,char *buf,int len)
{
} int fd; //用只读的方式打开文件,如果失败,返回0; if ((fd = open(filename,O_RDONLY))==-1) return 0; //读取长度为len 的字符串 int readlen = read(fd,buf,len); //关闭文件 close(fd); return readlen;
答案
int main() {
int status; pid_t pid; //设置信号SIGUSR1的处理函数为signalfun signal(SIGUSR1,signalfun); //创建子进程,同时通过判断返回值来确定当前是否是父进程,pid>0,为父进程 if (pid = fork()) { } else { //以下是子进程的处理 //休眠10毫秒 sleep(10); char ch[4]; //读取tempfile.c文件,里面有父进程的输入,等待处理 readfromfile("tempfile.c",ch,1); printf("child will do :\nchange %c to",ch[0]); //取得改字符的后续字符 ch[0] += 1; //对于比z大的,从a再开始 if (ch[0]>'z') ch[0]='a'; //将处理结果写回到tempfile.c文件 writetofile("tempfile.c",ch,1); //通知子进程下面结束 //父进程 printf("Parent:will send signal.\n"); char ch[4]; printf("Please input a char:"); //等待输入 ch[0] = getchar(); printf("\n"); //将输入写入文件tempfile.c writetofile("tempfile.c", ch,1); //向子进程发送信号,并阻塞本身, kill(pid,SIGUSR1); //等待子进程结束 wait(&status); char ch2[4]; //子进程结束后,读取tempfile.c文件,里面有子进程处理的内容 readfromfile("tempfile.c",ch2,1); //输出 printf("Now parent:%c be changed ,it is %c\n",ch[0],ch2[0]); printf("status = %d: Parent finished.\n",status);
答案
} } printf(" %c\nchild finished!\n",ch[0]); //如果处理结果是数字字符,那么进行进程图像转换 if (ch[0]>='0'&& ch[0]<='9') { } //退出 exit(0); printf("!!!yes,now execl begin:\n"); execl("/bin/ls","ls","-l",(char *)0);
…… 此处隐藏:428字,全部文档内容请下载后查看。喜欢就下载吧 ……相关推荐:
- [教学研究]2012西拉科学校团少队工作总结
- [教学研究]建筑工程公司档案管理制度
- [教学研究]小学数学人教版六年级上册圆的周长和面
- [教学研究]ERP电子行业解决方案
- [教学研究]钢支撑租赁合同范本
- [教学研究]预应力自动张拉系统用户手册Rev1.0
- [教学研究]MOOC课程:金瓶梅人物写真(每章节课后
- [教学研究]追加被执行人申请书(适用追加夫妻关系)
- [教学研究]2014年驾考科目一考试最新题库766
- [教学研究]2013-2014学年度九年级物理第15章《电
- [教学研究]新版中日交流标准日本语初级下26课-客
- [教学研究]小导管注浆施工作业指导书
- [教学研究]一般财务人员能力及人岗匹配评估表
- [教学研究]打1.2.页 小学一年级暑假口算100以内加
- [教学研究]学习贯彻《中国共产党党和国家机关基层
- [教学研究]2012年呼和浩特市中考试卷_35412
- [教学研究]最简易的电线电缆购销合同范本
- [教学研究]如何开展安全标准化建设
- [教学研究]工作分析与人岗匹配
- [教学研究]2016-2017学年高中历史第七单元现代中
- 山东省义务教育必修地方课程小学三年级
- 台湾宜兰大学互联网交换技术课程 01_In
- 思想品德:第一课《我知我家》课件(人
- SAR合成孔径雷达图像点目标仿真报告(附
- 利辛县“十三五”规划研究报告
- 2015-2020年中国手机APP行业市场发展趋
- 广告策略、创意表现、媒体方案
- 企业如何申请专利的的几点思考
- 《中国教育简史》网上作业
- 高中历史第二单元西方人文精神的起源及
- 年终晚会必备_精彩的主持稿_精心整理_
- 信息工程专业自荐书
- 2019高考历史人教版一轮练习:第十二单
- JAVA俱乐部管理系统软件需求规格说明书
- 2016-2021年中国小型板料折弯机行业市
- (人教新课标)六上_比的基本性质课件PPT
- 辽宁省公务员考试网申论备考技巧:名言
- 神经阻滞麻醉知情同意书
- 施工企业信息填报、审核和发布的相关事
- 初一(七年级)英语完形填空100篇




