实验5 文件系统 :Linux文件管理
1.实验目的
(1)掌握Linux提供的文件系统调用的使用方法;
(2)熟悉文件和目录操作的系统调用用户接口;
(3)了解操作系统文件系统的工作原理和工作方式。
2.实验内容
(1) 利用Linux有关系统调用函数编写一个文件工具filetools,要求具有下列功能:
***********
0. 退出
1. 创建新文件
2. 写文件
3. 读文件
4. 复制文件
1
5. 修改文件权限
6. 查看文件权限
7. 创建子目录
8. 删除子目录
9. 改变当前目录到指定目录10. 链接操作
***********
代码:
#include #include #include #include #include 2 #include #include #include void menu(void); void openfile(void); void writefile(void); void readfile(void); void copyfile(void); void chmd(void); void ckqx(void); void cjml(void); void scml(void); void ggml(void); 3 void ylj(void); int main() { int choose; int suliangjin=1; menu(); scanf(\"%d\ while(choose!=0) { switch(choose) { case 1:openfile();break; case 2:writefile();break; 4 case 3:readfile();break; case 4:copyfile();break; case 5:chmd();break; case 6:ckqx();break; case 7:cjml();break; case 8:scml();break; case 9:ggml();break; case 10:ylj();break; } menu(); scanf(\"%d\ } return 0; 5 } void menu(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\"); 6 printf(\"10.链接操作\\n\"); printf(\"0.退出\\n\"); printf(\"请输入您的选择...\\n\"); } void openfile(void) { int fd; if((fd=open(\"/tmp/hello.c\ perror(\"open\"); else printf(\"open file:hileo.c %d\\n\ if(close(fd)<0) perror(\"close\"); 7 else printf(\"Close hello.c\\n\"); } void writefile(void) { int fd,size,len; char *buf=\"Hello!I'm writing to this file!\"; len=strlen(buf); if((fd=open(\"/tmp/hello.c\ perror(\"open\"); else printf(\"open file:hileo.c %d\\n\ if((size=write(fd,buf,len))<0) 8 perror(\"write\"); else printf(\"Write:%s\\n\ if(close(fd)<0) perror(\"close\"); else printf(\"Close hello.c \\n\"); } void readfile(void) { int fd,size; char b[10]; if((fd=open(\"/tmp/hello.c\ 9 perror(\"open\"); else printf(\"open file:hileo.c %d\\n\ lseek(fd,0,SEEK_SET); if((size=read(fd,b,10))<0) perror(\"read\"); else printf(\"read from file:%s\\n\ if(close(fd)<0) perror(\"close\"); else printf(\"Close hello.c\\n\"); } 10 void copyfile(void) { if(fork()==0) execlp(\"/bin/cp\ else wait(0); printf(\"将hello.c复制he.c\"); } void chmd(void) { int a; printf(\"1.文件主可读可写可执行\\n\"); printf(\"2.文件主可读\\n\"); 11 printf(\"3.文件主可写\\n\"); printf(\"4.文件主可执行\\n\"); printf(\"请输入您的选项\\n\"); scanf(\"%d\ switch(a) { case 1:chmod(\"/tmp/hello.c\ case 2:chmod(\"/tmp/hello.c\ case 3:chmod(\"/tmp/hello.c\ case 4:chmod(\"/tmp/hello.c\ default:printf(\"您选择有误\\n\"); } } 12 void ckqx(void) { char *path=\"/bin/ls\"; char *argv[4]={\"ls\ if(fork()==0) execv(path,argv); else wait(0); } void cjml(void) { if(mkdir(\"/tmp/a\ perror(\"Mkdir\"); 13 else printf(\"创建成功\\n\"); } void scml(void) { if(rmdir(\"/tmp/a\")<0) perror(\"Rmdir\"); else printf(\"删除成功\\n\"); } void ggml(void) { if(chdir(\"/tmp/bc\")<0) 14 perror(\"chdir\"); else printf(\"更改目录成功\\n\"); } void ylj(void) { if(link(\"hello.c\ perror(\"Link\"); else printf(\"建立硬连接\\n\"); } 打开文件: 15 写文件: 读文件: 16 复制文件: 修改权限: 查看权限: 17 创建目录: 删除目录: 更改目录: 18 硬连接: 问题解决方案: 1. 在复制文件时用execlp函数,虽然有复制成功但是他就跳出整个程序,这就是一个缺陷。后来我在execlp前面加if(fork)()==0) 就可以咯 2. 硬连接不成功,老是抛出错误信息,后来发现原来是因为我的代码出错,还有我之前已经更改了目录所以就会经常报错 3. 到现在还不知道为什么我读出来的是乱码情解决 实验心得体会: 通过这次实验掌握Linux提供的文件系统调用的使用方法;熟悉文件和目录操作的调用用户接口,了解操作系统文件系统的工作原理和工作方式。 19 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- igat.cn 版权所有 赣ICP备2024042791号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务