西安邮电大学(计算机学院)课内实验报告实验名称:文件管理专业名称:软件工程班级:1101班学生姓名:学号(8位):04113027指导教师:黄茹实验日期:2013年12月20日一.实验目的及实验环境(一)实验目的(1)掌握有关Linux文件系统操作的常用命令。(2)加深对文件,目录,文件系统等概念的理解。(二)实验环境Ubuntu11.10二.实验内容(1)调试《Linux高级程序设计》P154-155的两个示例程序。(2)利用本章所学posixio系统调用实现mv命令的功能。(3)设计一个程序,要求打开文件“pass”,如果没有这个文件,新建此文件;读取系统文件“/etc/passwd”,把文件中的内容都写入“pass”文件。(4)设计一个程序,要求新建一个目录,预设权限为d--x--x--x。三.方案设计由于本次实验十分简单,都是对文件的一些简单操作,所以编写程序时,谈不上什么方案设计,就是结合课本内容,联系所学的知识,编写符合实验要求的程序,并调试,查看结果,掌握对文件的操作。四.测试数据及运行结果1.正常测试数据(3组)及运行结果;2.非正常测试数据(2组)及运行结果。五.总结1.实验过程中遇到的问题及解决办法;刚开始实验时,由于不熟悉Linux文件系统操作的常用命令,所以不会运行程序。后来请教其他同学,解决了该问题。在编写程序时,由于对文件的知识掌握的不是很熟练,所以出错比较多。对此,我应该加强上机练习。2.对设计及调试过程的心得体会。通过本次实验,我发现文件对于操作系统来说是必不可少的。掌握好文件的的有关知识很有必要。其次,遇到问题不要逃避,请教老师和同学,自己查阅资料,一定要将问题解决。本次实验结束后,我对于文件的了解更加深刻,编程能力也得到了进一步提升。六.附录:源代码(电子版)1-1.c代码:#includestdio.h#includeunistd.h#includestdlib.h#includesys/types.h#includesys/stat.h#defineN_BITS3intmain(intargc,char*argv[]){unsignedinti,mask=0700;structstatbuff;staticchar*perm[]={---,--x,-w-,-wx,r--,r-x,rw-,rwx};if(argc1){if((stat(argv[1],&buff)!=-1)){printf(permissionsfor%s\t,argv[1]);for(i=3;i;--i){printf(%3s,perm[(buff.st_mode&mask)(i-1)*N_BITS]);mask=N_BITS;}putchar('\n');}else{perror(argv[1]);exit(EXIT_FAILURE);}}else{fprintf(stderr,Usage:%sfile_name\n,argv[0]);}return0;}1-2.c代码:#includesys/types.h#includesys/stat.h#includestdlib.h#includestdio.hintmain(intargc,char*argv[]){inti;structstatbuf;char*ptr;for(i=1;iargc;i++){printf(%s:,argv[i]);if(lstat(argv[i],&buf)0){perror(lstat);continue;}if(S_ISREG(buf.st_mode))ptr=regularfile;elseif(S_ISDIR(buf.st_mode))ptr=directoryfile;elseif(S_ISCHR(buf.st_mode))ptr=characterspecialfile;elseif(S_ISBLK(buf.st_mode))ptr=blockspecialfile;elseif(S_ISFIFO(buf.st_mode))ptr=fifofile;#ifdefS_ISLNKelseif(S_ISLNK(buf.st_mode))ptr=symboliclink;#endif#ifdefS_ISSOCKelseif(S_ISSOCK(buf.st_mode))ptr=socket;#endifelseptr=**unknowmode**;printf(%s\n,ptr);}return0;}2.c代码:#includestdio.h#includestdlib.hintmain(intargc,char*argv[]){if(argc3){printf(Usage:%sold_namenew_name,argv[0]);exit(0);}if(rename(argv[1],argv[2])0)printf(error!\n);elseprintf(Movesuccess!\n);return0;}3.c代码:#includestdio.h#includestdlib.h#includefcntl.h#includestring.h#includesys/types.hvoidmain(){intfd1,fd2;charbuf[128];intnum;if((fd1=open(pass,O_WRONLY|O_CREAT,0644))==-1){perror(open1);exit(EXIT_FAILURE);}if((fd2=open(/etc/passwd,O_RDONLY))==-1){perror(open2);exit(EXIT_FAILURE);}do{num=read(fd2,buf,128);write(fd1,buf,num);}while(num==128);printf(文件已写入pass.\n);close(fd1);close(fd2);}4.c代码:#includestdio.h#includestdlib.h#includesys/types.h#includesys/stat.hintmain(){if(mkdir(dir1,00111)==-1){printf(error!\n);exit(0);}printf(Makedir1successed.\n);return0;}