实验5 文件系统

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

实验5文件系统:Linux文件管理一.实验目的和实验要求(1)掌握Linux提供的文件系统调用的使用方法;(2)熟悉文件和目录操作的系统调用用户接口;(3)了解操作系统文件系统的工作原理和工作方式。二.实验内容与实验步骤(1)利用Linux有关系统调用函数编写一个文件工具filetools,要求具有下列功能:***********0.退出1.创建新文件2.写文件3.读文件4.复制文件5.修改文件权限6.查看文件权限7.创建子目录8.删除子目录9.改变当前目录到指定目录10.链接操作三、实验成果提交***********代码:#includestdio.h#includesys/types.h#includeunistd.h#includefcntl.h#includesys/stat.h#includesyslog.h#includestring.h#includestdlib.hvoidmenu(void);voidopenfile(void);voidwritefile(void);voidreadfile(void);voidcopyfile(void);voidchmd(void);voidckqx(void);voidcjml(void);voidscml(void);voidggml(void);voidylj(void);intmain(){intchoose;intsuliangjin=1;menu();scanf(%d,&choose);while(choose!=0){switch(choose){case1:openfile();break;case2:writefile();break;case3:readfile();break;case4:copyfile();break;case5:chmd();break;case6:ckqx();break;case7:cjml();break;case8:scml();break;case9:ggml();break;case10:ylj();break;}menu();scanf(%d,&choose);}return0;}voidmenu(void){printf(文件系统\n);printf(1.创建新文件\n);printf(2.写文件\n);printf(3.读文件\n);printf(4.复制文件\n);printf(5.修改文件权限\n);printf(6.查看文件权限\n);printf(7.创建子目录\n);printf(8.删除子目录\n);printf(9.改变目前目录到指定目录\n);printf(10.链接操作\n);printf(0.退出\n);printf(请输入您的选择...\n);}voidopenfile(void){intfd;if((fd=open(/tmp/hello.c,O_CREAT|O_TRUNC|O_RDWR,0666))0)perror(open);elseprintf(openfile:hileo.c%d\n,fd);if(close(fd)0)perror(close);elseprintf(Closehello.c\n);}voidwritefile(void){intfd,size,len;char*buf=Hello!I'mwritingtothisfile!;len=strlen(buf);if((fd=open(/tmp/hello.c,O_CREAT|O_TRUNC|O_RDWR,0666))0)perror(open);elseprintf(openfile:hileo.c%d\n,fd);if((size=write(fd,buf,len))0)perror(write);elseprintf(Write:%s\n,buf);if(close(fd)0)perror(close);elseprintf(Closehello.c\n);}voidreadfile(void){intfd,size;charb[10];if((fd=open(/tmp/hello.c,O_CREAT|O_TRUNC|O_RDWR,0666))0)perror(open);elseprintf(openfile:hileo.c%d\n,fd);lseek(fd,0,SEEK_SET);if((size=read(fd,b,10))0)perror(read);elseprintf(readfromfile:%s\n,b);if(close(fd)0)perror(close);elseprintf(Closehello.c\n);}voidcopyfile(void){if(fork()==0)execlp(/bin/cp,cp,/tmp/hello.c,/tmp/he.c,NULL);elsewait(0);printf(将hello.c复制he.c);}voidchmd(void){inta;printf(1.文件主可读可写可执行\n);printf(2.文件主可读\n);printf(3.文件主可写\n);printf(4.文件主可执行\n);printf(请输入您的选项\n);scanf(%d,&a);switch(a){case1:chmod(/tmp/hello.c,S_IRWXU);printf(ok!\n);break;case2:chmod(/tmp/hello.c,S_IRUSR);printf(ok!\n);break;case3:chmod(/tmp/hello.c,S_IWUSR);printf(ok!\n);break;case4:chmod(/tmp/hello.c,S_IXUSR);printf(ok!\n);break;default:printf(您选择有误\n);}}voidckqx(void){char*path=/bin/ls;char*argv[4]={ls,-l,NULL};if(fork()==0)execv(path,argv);elsewait(0);}voidcjml(void){if(mkdir(/tmp/a,S_IRWXU)0)perror(Mkdir);elseprintf(创建成功\n);}voidscml(void){if(rmdir(/tmp/a)0)perror(Rmdir);elseprintf(删除成功\n);}voidggml(void){if(chdir(/tmp/bc)0)perror(chdir);elseprintf(更改目录成功\n);}voidylj(void){if(link(hello.c,h.c)0)perror(Link);elseprintf(建立硬连接\n);}四、实验中遇到的难点及解决办法1.在复制文件时用execlp函数,虽然有复制成功但是他就跳出整个程序,这就是一个缺陷。后来我在execlp前面加if(fork)()==0)就可以咯2.硬连接不成功,老是抛出错误信息,后来发现原来是因为我的代码出错,还有我之前已经更改了目录所以就会经常报错3.到现在还不知道为什么我读出来的是乱码情解决五、实验体会通过这次实验掌握Linux提供的文件系统调用的使用方法;熟悉文件和目录操作的调用用户接口,了解操作系统文件系统的工作原理和工作方式。

1 / 5
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功