NUAA 南航操作系统实验

这篇博客是南京航空航天大学操作系统实验报告,包括文件读写编程(myecho, mycat, mycp)、多进程(mysys, sh3)和多线程编程(pi1, pi2, sort, pc1, pc2)的实现。实验详细描述了各个程序的功能和实现细节,通过这些实验,作者深入理解了操作系统的基本概念,并巩固了理论知识。" 93272102,8257058,机器学习基础:线性判别函数与感知器算法解析,"['机器学习', '数据结构与算法']
摘要由CSDN通过智能技术生成

南京航空航天大学《操作系统》实验报告

  • 学号:1617202
  • 姓名:xxx
  • 完成日期:2020.6.23

实验是拿了高分实验,但是平心而论我实验报告确实是划水赶紧写了完事儿的实验报告,在此奉劝学弟学妹,边写代码边写报告,后面堆起来写实在太难受(我哭)
实验环境:VM虚拟机下Ubuntu  
实验是有一个实验楼网页做实验环境,但是我觉得太卡太慢电脑还容易挂,就用的虚拟机,没有装虚拟机或者觉得麻烦的不一定用这个,大家用的顺手的系统就好啦
所有代码全部完整贴在另外一个帖子里面 我不弄成要下载的东西 但是仅供参考 好歹也改一改再抄成不

目录

1.文件读写编程

1.1 myecho

1.1.1功能
  • myecho.c的功能与系统echo程序相同,接受命令行参数,并将参数打印出来。
1.1.2实现

通过系统传参,将参数直接打印出来。
接口:int main(int argc,char *argv[])
其中argv表示通过键盘传入的参数,通过cc -o myecho myecho.c编译成可执行文件后,实际是对该程序文件进行运行,所以我们只需要打印出来就可以模拟echo的作用。

1.2 mycat

1.2.1功能
  • mycat.c的功能与系统cat程序相同
  • mycat将指定的文件内容输出到屏幕
  • 要求使用系统调用open/read/write/close实现
1.2.2实现

我们可以看到,在程序的执行样例中给出的是文件的路径,我们需要打印出来文件中的内容则需要对文件进行相关的操作。
接口:int main(int argc,char *argv[])
其中argv是需要打印的文件的路径
思路:
对文件的操作大概分为三步:1.打开文件 2.将文件的内容读入缓冲区 3.将缓冲区内容打印到屏幕上
主要代码:

  1. 使用fopen函数打开文件,并对文件是否打开成功进行验证
fp=fopen(argv[1],"r");
        if(!fp){
                printf("Error!\n");
                exit(0);
        }
  1. 打开文件后对文件长度进行查验并给缓冲区分配相应的空间。
    此处使用fseek函数确定读取文件时候的指针位置,使用ftell确定文件长度,以及使用fwind将指针返回文件开头,便于将文件内容写入的时候从文件头进行写入。
fseek(fp,0,SEEK_END);
fsize=ftell(fp);
rewind(fp);
buffer=(char*)malloc((1+fsize)*sizeof(char));
  1. 将文件内容通过fwrite写入缓冲区进行打印
fread(buffer,1,fsize,fp);
printf("%s\n",buffer);

进行文件操作后记得使用fclose关闭文件。

1.3 mycp

1.3.1功能
  • mycp.c的功能与系统cp程序相同
  • 将源文件复制到目标文件
  • 要求使用系统调用open/read/write/close实现
1.3.2实现

接口:int main(int argc,char *argv[])
此处该出的参数有两个,第一个是原路径,另一个是拷贝后的路径文件名
思路:
这里我们可以看到mycp的作用与mycat有相似之处,我们需要做的就是在mycat的基础上,将缓冲区的文件内容写入新的文件。
主要代码:

  1. 新建目标文件
fp=fopen(argv[2],"w");
    if(!fp){
            printf("Error:open file wrong!\n");
            exit(0);
    }
  1. 将缓冲区内容写入文件
fwrite(buffer,1,fsize,fp);
  1. 关闭文件
fcl
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值