您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 实验5-Linux文件管理
实验5Linux文件管理学校:FJUT学号:3131903229班级:计算机1302姓名:姜峰注:本次实验为了简化操作,均采用指定文件名和目录名,其中路径也为指定路径。一.实验学时与类型学时:2,课外学时:自定实验类型:验证、设计性实验二.实验目的(1)了解操作系统文件系统的工作原理和工作方式;(2)了解文件和目录操作的系统调用用户接口;(3)了解Linux提供的文件系统调用的使用方法。三.实验内容(1)利用Linux有关系统调用函数编写一个文件工具filetools,要求具有下列功能:功能命令行0.退出exit1.创建新文件createfilefilename2.写文件writefilename3.读文件readfilename4.复制文件Copysrcname,dstname5.修改文件权限chmodfilenamemode6.查看文件权限lsmodfilename7.创建目录createdirpathname8.查看目录lspathname9.删除目录rmdirpathpame10.切换当前目录cdpathname11建立符号链接lnfilesysfile具体编程实现时,可以以菜单方式(左栏)提供功能选择,也可以按命令行方式(右栏)动态输入有关命令。头文件:#includestdio.h#includestring.h#includesys/types.h#includeunistd.h#includefcntl.h#includesys/stat.h#includesyslog.h#includestdlib.h主界面源码:intmain(){intn;while(1){printf(0.退出\n1.创建新文件\n2.写文件\n3.读文件\n4.复制文件\n);printf(5.修改文件权限\n6.查看文件权限\n7.创建子目录8.查看目录\n);printf(9.删除子目录\n10.改变当前目录到指定目录\n11.建立符号链接\n);printf(PleaseInputYourChoice:);scanf(%d,&n);switch(n){case0:Quit();break;case1:CreateFile();break;case2:WriteInFile();break;case3:ReadInFile();break;case4:CopyFile();break;case5:AlterFileAuthority();break;case6:ViewFileAuthority();break;case7:CreateSubdirectory();break;case8:ViewFilePathname();break;case9:DeleteSubdirectory();break;case10:CdToDestination();break;case11:LinkOperating();break;default:printf(Youhaveawrongchoice!\n);}printf(\n);}return0;}实验过程截图:0.退出源码:voidQuit()//0.退出{exit(0);}1.创建新文件原来文件夹中的文件:创建了一个为空的jiangfeng.c:源码:voidCreateFile()//1.创建新文件{intfp;if((fp=open(/home/test5/jiangfeng.c,O_CREAT|O_TRUNC|O_RDWR,0666))0){perror(open);}else{printf(Createfile:jiangfeng.c\n);}getchar();if(close(fp)0){perror(close);}else{printf(Closefile:jiangfeng.c\n);}}2.写文件向jiangfeng.c中写入数据:打开jiangfeng.c查看:源码:voidWriteInFile()//2.写文件{intfp;charbuf[1024];if((fp=open(/home/test5/jiangfeng.c,O_CREAT|O_APPEND|O_RDWR,0666))0){perror(open);}else{printf(Openfile:jiangfeng.c\n);}printf(Pleaseinputyourdata(1024bytes):\n);scanf(%s,buf);if(write(fp,buf,strlen(buf))0){perror(write);}else{printf(WrittenSuccess!\n);}getchar();if(close(fp)0){perror(close);}else{printf(Closefile:jiangfeng.c\n);}}3.读文件从jiangfeng.c中读数据:再次写入一段数据:再次从文件中读数据发现刚才的数据附在末尾,表面写数据是从文件末尾开始写的:源码:voidReadInFile()//3.读文件{intfp;char*buf;intfront,rear;if((fp=open(/home/test5/jiangfeng.c,O_RDWR,0666))0){perror(open);}else{printf(Openfile:jiangfeng.c\n);}getchar();rear=lseek(fp,0,SEEK_END);front=lseek(fp,0,SEEK_SET);//设置文件指针位置front=rear-front;buf=(char*)malloc(front);if(read(fp,buf,front+1)0){perror(read);}else{printf(ReadSuccess!\n);}printf(%s\n,buf);getchar();if(close(fp)0){perror(close);}else{printf(Closefile:jiangfeng.c\n);}}4.复制文件在本目录下又创建一个jiangfengcopy.c的文件并将jiangfeng.c的数据copy到其中观察jiangfengcopy.c的数据与jiangfeng.c数据对比:源码:voidCopyFile()//4.复制文件{intfp,fd;char*buf;intfront,rear;if((fp=open(/home/test5/jiangfeng.c,O_RDWR,0666))0){perror(open);}else{printf(Openfile:jiangfeng.c\n);}getchar();rear=lseek(fp,0,SEEK_END);front=lseek(fp,0,SEEK_SET);//设置文件指针位置front=rear-front;buf=(char*)malloc(front);if(read(fp,buf,front+1)0){perror(read);printf(CopyError!\n);}else{if((fd=open(/home/test5/jiangfengcopy.c,O_CREAT|O_TRUNC|O_RDWR,0666))0){perror(open);printf(CopyError!\n);}if(write(fd,buf,strlen(buf))0){perror(write);printf(CopyError!\n);}else{printf(Copyfromjiangfeng.ctojiangfengcopy.cSuccess!\n);}}getchar();if(close(fp)0||close(fd)0){perror(close);}else{printf(Closefile:jiangfeng.candjiangfengcopy.c\n);}}5.修改文件权限以及查看文件权限先查看原本文件权限:再修改文件权限:已改为“读”权限:源码:voidAlterFileAuthority()//5.修改文件权限{intn;printf(0.读,写,执行1.读2.写3.执行\n);printf(PleaseInputYourChoice:);scanf(%d,&n);switch(n){case0:chmod(/home/test5/jiangfeng.c,S_IRWXU);break;//读,写,执行case1:chmod(/home/test5/jiangfeng.c,S_IRUSR);break;//读case2:chmod(/home/test5/jiangfeng.c,S_IWUSR);break;//写case3:chmod(/home/test5/jiangfeng.c,S_IXUSR);break;//执行default:printf(Youhaveawrongchoice!\n);}}voidViewFileAuthority()//6.查看文件权限{char*path=/bin/ls;char*argv[4]={ls,-l,/home/test5/jiangfeng.c,NULL};execv(path,argv);//执行ls–ljiangfeng.c}6.创建子目录可看到目录中出现jiangfeng的子目录:源码:voidCreateSubdirectory()//7.创建子目录{if(mkdir(/home/test5/jiangfeng,S_IRWXU)0){perror(mkdir);}else{printf(CreateSuccess!\n);}}7.查看目录查看当前目录下的文件:源码:voidViewFilePathname()//8.查看目录{char*path=/bin/ls;char*argv[4]={ls,-l,NULL};execv(path,argv);//执行ls–l}8.删除子目录观察后,发现已将jiangfeng子目录删除:源码:voidDeleteSubdirectory()//9.删除子目录{if(rmdir(/home/test5/jiangfeng)0){perror(rmdir);}else{printf(DeleteSuccess!\n);}}9.改变当前目录到指定目录(到test3中)查看当前目录下文件,说明已经转到test3下。源码:voidCdToDestination()//10.改变当前目录到指定目录{if(chdir(/home/test3)0){perror(chdir);}else{printf(UpdateSuccess!\n);}}10.建立符号链接建立一个名为jiang.c的链接查看目录,发现链接已建立:源码:voidLinkOperating()//11.建立符号链接{if(link(jiangfeng.c,jiang.c)0){perror(link);}else{printf(CreateSuccess\n);}}(2)利用winhex工具解析FAT文件系统格式,并给出文件系统类型有关分析数据。提示:由于磁盘容量通常较大,可选择一个小容量U盘进行分析。(选做)我采用u盘详情如下:此图为winhex分析后的主界面:启动扇区放在物理空间的第一个地址:FAT1区:FAT2区:容量备用区:剩余空间区:这些为u盘内数据(删除后的文件均为半透明显示):对于FAT32系统格式详情请参考四.相关实验指导1.文件系统调用(1)打开或新建文件系统调用open函数intopen(constchar*pathname,intflags);intopen(constchar*pathname,intflags,mode_tm
本文标题:实验5-Linux文件管理
链接地址:https://www.777doc.com/doc-5501614 .html