教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 教学研究 >

操作系统实验2参考答案

来源:网络收集 时间:2026-01-20
导读: 答案 实验 进程和进程通信实验参考答案 (一) 实验题目 父进程输入一个字符,传递给子进程,由子进程得到该字符向后的偏移字符,如果最终字符大于z,那么最终字符显示成a,另外,如果转化成数字字符(0――9),那么进行进程图像转换,执行ls命令! 程序框图如

答案

实验 进程和进程通信实验参考答案

(一) 实验题目

父进程输入一个字符,传递给子进程,由子进程得到该字符向后的偏移字符,如果最终字符大于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字,全部文档内容请下载后查看。喜欢就下载吧 ……
操作系统实验2参考答案.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/49024.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)