南京航空航天大学《操作系统》实验报告
- 学号: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.将缓冲区内容打印到屏幕上
主要代码:
- 使用fopen函数打开文件,并对文件是否打开成功进行验证
fp=fopen(argv[1],"r");
if(!fp){
printf("Error!\n");
exit(0);
}
- 打开文件后对文件长度进行查验并给缓冲区分配相应的空间。
此处使用fseek函数确定读取文件时候的指针位置,使用ftell确定文件长度,以及使用fwind将指针返回文件开头,便于将文件内容写入的时候从文件头进行写入。
fseek(fp,0,SEEK_END);
fsize=ftell(fp);
rewind(fp);
buffer=(char*)malloc((1+fsize)*sizeof(char));
- 将文件内容通过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的基础上,将缓冲区的文件内容写入新的文件。
主要代码:
- 新建目标文件
fp=fopen(argv[2],"w");
if(!fp){
printf("Error:open file wrong!\n");
exit(0);
}
- 将缓冲区内容写入文件
fwrite(buffer,1,fsize,fp);
- 关闭文件
fcl