LINUX系统实践实验.docx
- 文档编号:10883613
- 上传时间:2023-05-28
- 格式:DOCX
- 页数:8
- 大小:791.93KB
LINUX系统实践实验.docx
《LINUX系统实践实验.docx》由会员分享,可在线阅读,更多相关《LINUX系统实践实验.docx(8页珍藏版)》请在冰点文库上搜索。
LINUX系统实践实验
实验报告
课程名称:
LINUX系统实践
实验工程:
Linux下的C语言编程
实验仪器:
PC机gcc编译器
学院:
计算机学院
专业:
计算机科学与技术
班级:
计科1601班罗坤
学号:
2016011155
日期:
2018年5月20日
指导教师:
路旭强
同组成员:
成绩:
一.实验目的
1.通过本实验练习,使学生掌握有关文件管理与文件操作的容。
首先要熟悉在LINUX系统下文件系统的构建方法;
2.其次要熟练掌握在LINUX环境下用C语言进展高级编程的方法〔即有关文件操作的系统调用的使用〕,进而充分了解LINUX文件系统中shell命令的实现原理以及它们用到的系统调用。
二.实验容
本实验要求在LINUX/UNIX环境下用C语言编写三个具体的SHELL命令,根本涉及了LINUX/UNIX文件系统中较为常用的有关文件操作的系统调用。
容如下:
1.编程实现copy命令,执行格式:
copyfile1file2file3功能:
将file1、file2两文件的容合并拷入file3中,其中间应有30个字节的空洞(调试成功后可将空洞调大到几十MB)。
程序执行后用du命令显示其占用磁盘空间,观察其大小,分析原因。
程序可能涉及到的系统调用:
read(),write(),open(),creat(),close(),lseek()
2.编程实现renam(即LINUX下的rename)命令,功能是实现文件的重命名。
执行格式:
renamfileafileb;其中filea为源文件,fileb为目标文件。
程序执行时应显示出命令行的所有参数,并给出重命名前后两个文件的大小、索引节点号及最近一次状态改变的时间。
程序可能涉及到的系统调用:
read(),write(),open(),stat(),close(),link(),unlink()
3.编程实现lnk命令,执行格式:
lnkf1f2f3。
具体要求如下:
⑴分别使用link()和symlink()为文件f1创立其硬文件f2和符号3文件f3。
⑵分别使用stat()和lstat()调用给出文件f2和f3大小、索引节点号、权限、存放该文件的设备号及文件修改时间,比拟其异同。
说明原因。
三.实验过程
第一题
#include
#include
#include
#include
#include
#include
intmain(intargc,charconst*argv[])
//argc是参数个数,argv是指向参数的指针数组
{
intfile1,file2,file3;
file1=open(argv[1],O_RDONLY);
file2=open(argv[2],O_RDONLY);
file3=open(argv[3],O_CREAT|O_RDWR,S_IRWXU);
//文件不存在就创立它,使文件具有读写执行的权利
intn;
charbuf[1024];
while((n=read(file1,buf,1024))>0)//读取file1的前1024个字符到buf里
write(file3,buf,n);
lseek(file3,30,SEEK_END);//在file3后面文件长度加30个字节,形成空洞
while((n=read(file2,buf,1024))>0)
write(file3,buf,n);
close(file1);
close(file2);
close(file3);
printf("FINISH\n");
return0;
}
第二题
#include
#include
#include
#include
intmain(intargc,char*argv[])
{
structstatstate;
stat(argv[1],&state);//把argv[1]的信息放在state所指的构造里
printf("文件大小=%ld字节\n",state.st_size);
printf("索引节点号=%ld\n",state.st_ino);
printf("最近一次改变状态改变的时间=%ld\n",state.st_ctime);
link(argv[1],argv[2]);//对一个已经存在的文件创立新的硬
stat(argv[2],&state);
printf("文件大小=%ld字节\n",state.st_size);
printf("索引节点号=%ld\n",state.st_ino);
printf("最近一次改变状态改变的时间=%ld\n",state.st_ctime);
unlink(argv[1]);
printf("FINISH\n");
return0;
}
第三题
#include
#include
#include
#include
intmain(intargc,char*argv[])
{
structstatduf1,duf2;
link(argv[1],argv[2]);
symlink(argv[1],argv[3]);
stat(argv[2],&duf1);
stat(argv[3],&duf2);//如果文件是符号,lstat返回的是符号本身的信息,stat返回的是符号所指文件的信息
printf("执行stat后:
\n");
printf("硬文件大小=%ld字节\n",duf1.st_size);
printf("符号文件大小=%ld字节\n",duf2.st_size);
printf("硬文件索引节点号=%ld\n",duf1.st_ino);
printf("符号文件索引节点号=%ld\n",duf2.st_ino);
printf("硬文件所在设备号=%ld\n",duf1.st_dev);
printf("符号文件所在设备号=%ld\n",duf2.st_dev);
printf("硬文件最近一次修改时间=%ld\n",duf1.st_mtime);
printf("符号文件最近一次修改时间=%ld\n",duf2.st_mtime);
lstat(argv[2],&duf1);
lstat(argv[3],&duf2);
printf("执行lstat后:
\n");
printf("硬文件大小=%ld字节\n",duf1.st_size);
printf("符号文件大小=%ld字节\n",duf2.st_size);
printf("硬文件索引节点号=%ld\n",duf1.st_ino);
printf("符号文件索引节点号=%ld\n",duf2.st_ino);
printf("硬文件所在设备号=%ld\n",duf1.st_dev);
printf("符号文件所在设备号=%ld\n",duf2.st_dev);
printf("硬文件最近一次修改时间=%ld\n",duf1.st_mtime);
printf("符号文件最近一次修改时间=%ld\n",duf2.st_mtime);
return0;
}
四.实验总结
通过这次实验,使得我对Linux脚本编写以及调试有了更深的理解,学会了在Linux环境下编写简单的C程序,实现了copy命令,编程实现了renam命令,在理解stat构造容的根底下分别使用stat〔〕和lstat〔〕系统调用显示文件信息构造的容,对于在Linux环境下实现C语言的程序实现有了进一步的掌握,使得对以后的学习有了进一步的帮助。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LINUX 系统 实践 实验
![提示](https://static.bingdoc.com/images/bang_tan.gif)