




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、操作系统实践报告多进程主题Sh1.c:实现外壳程序,并需要以下功能支持命令参数$ echo arg1 arg2 arg3$ ls /bin /usr/bin /home实现内置命令cd,pwd,exit$ cd /bin$ pwd/bin想法:注意:首先建立一个死循环模拟外壳终端,读取用户的输入,根据空格将输入分成字符串数组,然后调用excute进行处理。1.回声根据数组的第一个元素来确定命令是什么,在确定它是ehco之后,分叉一个新的进程并一个接一个地输出它的内容,父进程在执行之前等待子进程退出,确保输出不会在屏幕上被中断。2.ls读取用户输入并根据拆分数组判断为ls命令后,分叉一个新的进程
2、,调用execlp函数将/bin/ls下的ls程序加载到子进程中,并将拆分数组参数部分传递给ls。同样,父进程等待子进程退出,以确保输出不会在屏幕上中断。3.激光唱片同样,在输入并分割成数组后,判断它是cd命令后,分叉一个新进程,然后调用chdir并将分割数组的参数部分作为参数传递给chdir。4.pwd在输入并分割成数组后,还确定它是pwd命令。分叉一个新进程,然后调用系统(pwd)。该命令也可用于验证上述cd命令是否正确执行。5.出口执行子函数根据用户按网格输入的数组拆分判断为退出命令后,返回-1,检测循环中执行的返回值,如果为-1,则直接返回,退出模拟外壳终端。Sh2.c:实现了shel
3、l程序,并要求在版本1中添加以下功能实现文件重定向$ echo hello日志$ cat日志你好想法:根据sh1.c的描述,如果确定是echo命令,则有必要再次确定“”是否出现在拆分字符串数组中。如果是这样的话,则以“”之前和echo之后的内容作为输出,以“”到“”之后的第一个空白字符作为文件名,fopen创建文件,fwrite将输出到文件,并关闭文件。sh1.c和sh2.c的源代码:#包括#包括#包括#包括#包括#包括#包括#定义LEN 256#定义WIDTH 256#定义HEIGHT 10空隙分割(充电源,充电目的地高度宽度)char * p;p=strsep(来源 );int I=0;对
4、于(I=0;pi!= 0;i )dest0I=pI;dest0I= 0;int j=1;而(p)p=strsep(来源 );if(p)对于(I=0;pi!= 0;i )destjI=pI;destjI= 0;j;int执行(char commHEIGHTWIDTH)if(strcmp(comm0, echo)=0)int PID=fork();if(pid=0)int I=0;int=0;对于(I=1;commi0!= 0;i )if(commI0=)is=1;休息;if(is=1)puts(commI 1);FILE *fp=fopen(通信i 1,w);int j=0;对于(j=1;(j
5、);获取(命令);拆分(命令,拆分数组);int I=0;如果(-1=执行(splitArray)返回0;Sh3.c:实现了shell程序,并要求在版本2中添加以下功能实施管道$ cat /etc/passwd | wc -l实现管道和文件重定向$ cat输入. txt321321$ cat output.txt$ cat output.txt123想法:首先读取用户输入,将输入分成以“|”为分隔符的字符串数组,然后在while循环中依次执行以下操作:通过代码中的pipe()函数创建管道。创建后,一个父进程和一个子进程只能向管道写入内容,另一个只能向管道读取内容。然后使用dup()函数将流程的
6、输入流或输出流重定向到流水线,从而实现流水线的操作。实现时,请注意,可以使用多个“|”来迭代管道操作,并且需要一个循环来处理它。使用系统执行每个命令,同时请注意,最后一个操作的输出流是标准输出(即屏幕),不需要重定向到管道中,需要特殊处理。源代码:#包括#包括#包括#包括#包括#包括#包括#定义LEN 256#定义WIDTH 256#定义HEIGHT 10空隙分割(充电源,充电目的地高度宽度)char * p;p=strsep(来源, | );int I=0;对于(1=0;pi!= 0;i )目标01=p1;目标01= 0;int j=1;而(p)p=strsep(来源“|”);if(p)对于
7、(1=0;pi!= 0;i )目标jI=pI;目标jI= 0;j;main()茶命令LEN;char SplitArrayHEIGHTWIDTH= 0 ;printf(% s , );获取(命令);拆分(命令,拆分数组);整数1=0;对于(1=0;splitArrayi0!= 0;i )puts(拆分数组I);int p2;管道(p);int j=0;对于(j=0;splitArrayj 10!= 0;j )if (fork()=0) /子进程关闭(0);关闭(p0)关闭(p1);dup(p0);系统(SplitArrayj);其他/父进程关闭(1);关闭(p0)关闭(p1);dup(p1);
8、系统(SplitArrayj 1);多线程题目pi1.c:使用2个线程根据莱布尼兹级数计算PI莱布尼兹级数公式: 1 - 1/3 1/5 - 1/7 1/9 -.=/4主线程创建1个辅助线程主线程计算级数的前半部分辅助线程计算级数的后半部分主线程等待辅助线程运行結束后,将前半部分和后半部分相加思路:计算公式前1000项,主线程计算前5000项,子线程计算后5000项,主进程等待子进程结束,通过pthread_join(sub,(void *)结果);的结果参数获取子进程计算结果再相加即可。源代码:#包括#包括#包括#包括#定义LEN 10000结构结果浮动总和;void *subThread(
9、)国际;浮动j;结构结果*结果;浮点sum1=0,sum2=0,sum=0;对于(1=LEN/2 1;i=LEN .i )j=i .if(i%2=0)总和1=1/(2 * j-1);/printf(% f n ,总和2);if(i%2=1)总和2=1/(2 * j-1);/printf(% f n ,总和1);总和=总和2-总和1;/printf(% f n ,总和);/printf(% f n ,总和);结果=malloc(大小(结果);结果-总和=总和;返回结果;int main()国际;浮动j;浮点sum1=0,sum2=0,sum=0;对于(I=1;I=LEN/2。i )j=i .if(i%2=0)总和1=1/(2 * j-1);if(i%2=1)总和2=1/(2 * j-1);总和=总和2-总
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 局部视图教学课件
- 九年级体育教学体能提升计划
- 腹膜透析患者健康教育
- 平顶山市市级机关选调真题2024
- 吉安职业技术学院招聘教师笔试真题2024
- 数学教研组信息技术教学案例研修计划
- 医疗收入专户管理办法
- 七年级语文部编教材教学案例计划
- 农村兼职电工管理办法
- 公车司机违章管理办法
- (约克)机组热回收技术
- (完整版)常见肿瘤AJCC分期手册第八版(中文版)
- 哔哩哔哩认证公函
- 托玛琳养生碗gg课件
- 水产养殖示范基地建设项目实施方案
- 行政后勤人员 三级安全教育培训记录卡
- 消化系统炎症性肠病labc
- DB52∕T 1480-2019 GLW-8430连栋塑料薄膜温室通用技术规范
- 医院核心制度题库(有答案)已修整(共48页)
- 危险源辨识与隐患排查全面讲解
- 第9分册并联电容器组运维细则(国网上海)
评论
0/150
提交评论