最新011463-孟启贤-实验四-linux下的c语言编程_第1页
最新011463-孟启贤-实验四-linux下的c语言编程_第2页
最新011463-孟启贤-实验四-linux下的c语言编程_第3页
最新011463-孟启贤-实验四-linux下的c语言编程_第4页
最新011463-孟启贤-实验四-linux下的c语言编程_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、如有侵权请联系网站删除、仅供学习交流201 701 1463-孟启贤-实验四-Linux下的C语言编程实验报告课程名称Linux系统实践实验项目_Linux下的C语言编程 实验仪器 PC系别计算机学院专业网络工程班级/学号网 1702/2017011463学生姓名孟启贤实验日期 5. 13成 绩指导教师 李艳平.仅供学习交流如有侵权请联系网站删除、仅供学习交流实验四Linux下的C语言编程实验类别:设计型实验时数:6学时开课单位:计算机学院实验地点:健翔校区计算中心一、实验目的通过本实验练习,使学生掌握有关文件管理与文件操作的内容。首先要 熟悉在LINUX系统下文件系统的构建方法:其次要熟练掌

2、握在LINUX 环境下用C语言进行高级编程的方法(即有关文件操作的系统调用的使 用),进而充分了解LINUX文件系统中shell命令的实现原理以及用到 的系统调用。二、实验环境操作系统:任何Unix/Linux或MAC编译器:gcc三、预备知识1、关于系统调用和库函数C语言支持一系列的库函数的调用,其中最基本的是studio库函 数。事实上,库函数只是C语言在较高层次上调用的方式,系统调 用是更低层次的与C语言的界面,是内核提供给用户调用的函数。2、LINUX环境下系统调用和库函数的异同(DC程序使用系统调用的语句和调用库函数的语句形式完全相同,但是 二者运行的环境和运行机制截然不同。从运行环

3、境来看,库函数使用依赖于所运行的用户环境,程序调用库 函数时,它运行的目标代码是属于程序的,程序处于“用户态”执行;而 系统调用的使用不依赖于它运行的用户环境,是LINUX内核提供的低层服务,系统调用时所执行的代码是属于内核的,程序处于“核 心态”执行。程序库函数的调用最终还是要通过LINUX系统调用来实现,库函 数一般执行一条指令,该指令(操作系统陷阱operating system trap)将进程执行方式变为核心态,然后使内核为系统调用执行代码。四(1)、实验内容本实验要求在LINUX/UNIX环境下用C语言完成SHELL命令的编写,基 本涉及了 LINUX/UNIX文件系统中较为常用的

4、有关文件操作的系统调用。内容如下:1、编程实现Ink命令,执行格式:Ink f1 f2 f3。具体要求如下:分别使用link()和symlink()为文件f1 (任意)创建其硬链接文件f2和符号链接文件f3o分别使用stat()和lstat()调用给出文件f2和f3的索引节点号、权 限、存放该文件的设备号及文件修改时间,比较其异同。说明原因。#include <sys/types.h>#inckide <sys/stat.h>#inckide <fcntl.h>#include <unistd.h>#inckide<stdio.h>i

5、nt main(int argc, char const *argv)struct stat buf;if (argc!=4)printf(Hinput errornM);return 0;if (link(argvl,argv2)=-l)printf(Hlink errornH);return 0;)if (symlink(argvl ,argv3)=-1)(printf(nsynilink errornH);return 0;if (stat(argv2, &buf) = -1)printf(Hstat f2 errornH);return 0;printf(Hstat f2iiH

6、);printf("索引号节点号:%ldn",buf.st_ino);printf("权限:%on",buf.st_mode);printf("设备号:%ldn",buf.st_dev);printf("文件修改时间:%ld»",buf.st_mtime);if (stat(argv3, &buf) = -1)(printf(nstat f3 errornM);return 0;)printf(Hstat f3nH);printf("索引号节点号:%ld»",buf.

7、st_ino);printf("权限:%on”, buf.st_mode);printf("设备号:%ld»",buf.st_dev);printf("文件修改时间:%ld»",buf.st_mtime);if (lstat(argv2, &buf) <0)printf,Istat f2 errornH);return 0;仅供学习交流如有侵权请联系网站删除、仅供学习交流1printf("Istat f2ii");printf("索引号节点号:%ldii",buf.st_

8、ino);printf("权限:on”,buf.st_mode);printf("设备号:%ldn",buf.st_dev);printf("文件修改时间:%ldn",buf.st_mtime);if (lstat(argv3, &buf) <0)printf(Hlstat f3 errornM);return 0;printf("lstat f3n”);printf("索引号节点号:%ldn",buf.st_ino);printf("权限:%on' buf.st_mode);pri

9、ntf("设备号:%ldn ",buf.st_dev);printf("文件修改时间:%ldn",buf.st_mtime);printf(HfinishedM);return 0;)结果如下:仅供学习交流mrasubuntu: -*/1文件编辑查看搜索终端帮助(H) mrasubuntu:-/1463$ /实验四l.out fl f2 f3 link errormrasQubuntu:*/1463$ ,/实验四l.out fl f2 f3hello.dE实验四1.out实验四2(实验四2.outgoutpu tream6NS51;stat f2!索引号

10、节点号: 权限:100644 设备号:2649 文件修改时间:索引号节点号: 权限:100644 设备号:2049 文件修改时间: 蓦冷A点号: 权限:100644 设备号:2649 文件修改时间: 春i号节点号: 权限:120777 设备号:2649 文件修改时间:9281901558269111928190155826911192819015582691119196391558269122ftntshedmrasgubuntu:-/1463$原因:Stat对于硬链接和软连接都是返回链接所指文件的信息。但是对于Istst,如果文件是符号链接,Istat返回的是符号链接本身的信 息。2、编程实

11、现copy命令,执行格式:copy cj.txt fl功能:复制前先将文件f1(见1)的内容清空;分别使用fstat(), stat()和Istat。调用给出文件f1、f2和f3大 小及最近一次状态改变的时间;将实验三新创建文件cj.txt中前100个字节的内容拷入f1 中,在其后创建30个字节的空洞,然后再复制cj.txt中第 141个字节之后的内容到f1中;复制成功后,显示文件f2的大小及文件f1的内容。上述功能实现后可将空洞调大到几十儿仃MB,然后用du命 令显示文件f1占用的磁盘空间,观察其大小,分析原因。问题:上述第项中用fstat()替换stat()显示文件f2的信息可以吗?为什么

12、?答:不可以,fstat是用文件的描述符指向文件。比较上述第项和第项的结果,文件f2的大小为何有变化?F2是fl的硬链接,本质是一个文件,前面是对fl内容清空了, 后面在fl中放入了一些内容,所以大小改变了。程序可能涉及到的系统调用:read。,write(), open(), creat(), close(),lseek(), stat(), fstat(), lstat()#inckide <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#inckide <unistd.h>#incki

13、de <stdio.h>int main(int argc,char *argv)char s;struct stat buf;if (argc!=3)printf(Minput errornH);return 0;int a=open(Hfr;O_CREATIO_TRUNCIO_RDWR); if(a=-l)_ printf("ERROR!");fl erronn*);/f (stat("f 1", &buf)=-l)U1”,buf.st_size);态时间:%lann,buf.sCctime);if (lstat(Hfr; &am

14、p;buf) <0) printf("lstat fl errorn");return 0;printf(HIstat flnH);print 铲大小:%ldn*buf.st_size);print 心最近一次状态时间:一 ldnn”,buf.st_ctime);if (fstat(a, &buf) <0)t tk t n n n 1 1 1 r r r 4> or 一qnntf( fstat fl errorm );Mfstat flnH);%ldn”,bufst_size);"最近一次状态时间:%laMin,buf.sCctime);

15、/盯2*/肥=o 专 n(”f2”Q_CREATIO_TRUNC); printf("ERROR!");if (stat(Mf2,&buf) = -l) printf("stat f2 errorn");return 0;printf(Hstat f2n");printfC Azb: %ldn*buf.st_size);print 心最近一次状态时间:一 ldnn”,buf.st_ctime);if (lstat(Hf2 &buf) <0)t tk t n n n 1 1 1 r r r 4> or 一rmtf( &

16、#39;Istat f2 errornM);Hlstat f2nH);%ldn”,bufst_size);"最近一次状态时间:%laMin,buf.sCctime);if (fstat(b, &buf) <0) printf("fstat f2 errorn");return 0;printf(Hfstat f2nn);printf(nA<b: 刎 dn",bqf.st_size);print铲最近一次状态时间:匆kKnbuf.st_ctime);close(b);/*f3*/im c=o专n(”f3",O_CREATIO_

17、TRUNC);printf("ERROR!");if(stat("f3", &buf)=-l)<printf("stat f3 errorn");return 0;printf("stat f3ii");盟海盍强二测露榔卧崂温n”,buf.st_ctime);if (lstat("f3 &buf) <0) printf("lstat f3 errorn");return 0;printf("lstat f3n”);般哪堪金二用露群解您翻abufim

18、e);if (fstat(c, &buf) <0)< printf("fstat f3 errorn");return 0;printf("fstat f3n");昭强磕金二榭愣端流嚏鼠close(c);int d=open(''cj.txtO_CREATIO_RDWR);if(d=-l)printf(HERROR!n);Aint e=open("fl",O_CREATIO_TRUNCIO_RDWR); if(e=-l) printf("ERROR!");)*/int n;if

19、(n=read(d,&bufJ00)>0)if ( write(a,&buf,n) !=n)printf(Ha/write errornH);if (n<0)printf(Hread errornH);if(lseek(dJ41 ,SEEK_SET)=-1) printf("error!");int m;if(lseek(a30,SEEK_CUR)=-1) printf("error!");char bu21000;if (m=read(d,buf2,1000)>0)if (write(a,buf2,m)!=m) pri

20、ntf(Hd/write errornH);)if (m<=0)< printf("read error»");if(stat(Hf2,&buf) = -l)printf(Hstat f2 errornH);return U;printfCstat f2 晚大小n");print 铲大小:%ldnH,buf.st_size);close(a);int z=openni0 RDONLY); while(read(z,sJ)Tprintf(H%cs);printf("n");close(d);close(a);retu

21、rn 0;截图如下:有侵权请联系网站删除,仅供学习交流文件(F)编辑(E)查看(V)搜索(S)终端(T)帮助(H) 大小:0最近一次状态时间:1558881304Istat fl大小:0最近一次状态时间:1558881304fstat fl大小:0最近一次状态时间:1558881304stat f2大小:0最近一次状态时间:1558881304Istat f2大小:。最近一次状态时间:1558881304fstat f2大小:0最近一次状态时间:1558881304stat f3大小:0最近一次状态时间:1558881304Istat f3关小:2最近一次状态时间:1558879761fstat f3大小:0最近一次状态时间:1558881304stat f2的大小大小:255姓名字号卷面平时总评stul2017000001317539.80stu22017000002556857.60146320191.80Stu4201700000476837

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论