实验5 文件系统 :Linux文件管理
1.实验目的
(1)掌握Linux提供的文件系统调用的使用方法;
(2)熟悉文件和目录操作的系统调用用户接口;
(3)了解操作系统文件系统的工作原理和工作方式。
2.实验内容
(1) 利用Linux有关系统调用函数编写一个文件工具,要求具有下列功能:
***********
0. 退出
1. 创建新文件
2. 写文件
3. 读文件
4. 复制文件
5. 修改文件权限
6. 查看文件权限
7. 创建子目录
8. 删除子目录
9. 改变当前目录到指定目录
10. 链接操作
***********
代码:
#include #include #include #include #include #include #include #include void menu(void); void open); void write); void read); void copy); void chmd(void); void ckqx(void); void cjml(void); void scml(void); void ggml(void); 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; 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; } 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\"); printf(\"10.链接操作\\n\"); printf(\"0.退出\\n\"); printf(\"请输入您的选择...\\n\"); } void open) { int fd; if((fd=open(\"/tmp/hello.c\ perror(\"open\"); else printf(\"open %d\\n\ if(close(fd)<0) perror(\"close\"); else printf(\"Close hello.c\\n\"); } void write) { 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 %d\\n\ if((size=write(fd,buf,len))<0) perror(\"write\"); else printf(\"Write:%s\\n\ if(close(fd)<0) perror(\"close\"); else printf(\"Close hello.c \\n\"); } void read) { int fd,size; char b[10]; if((fd=open(\"/tmp/hello.c\ perror(\"open\"); else printf(\"open %d\\n\ lseek(fd,0,SEEK_SET); if((size=read(fd,b,10))<0) perror(\"read\"); else printf(\"read from \\n\ if(close(fd)<0) perror(\"close\"); else printf(\"Close hello.c\\n\"); } void copy) { 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\"); 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\"); } } 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\"); else printf(\"创建成功\\n\"); } void scml(void) { if(rmdir(\"/tmp/a\")<0) perror(\"Rmdir\"); else printf(\"删除成功\\n\"); } void ggml(void) { if(chdir(\"/tmp/bc\")<0) perror(\"chdir\"); else printf(\"更改目录成功\\n\"); } void ylj(void) { if(link(\"hello.c\ perror(\"Link\"); else printf(\"建立硬连接\\n\"); } 打开文件: 写文件: 读文件: 复制文件: 修改权限: 查看权限: 创建目录: 删除目录: 更改目录: 硬连接: 问题解决方案: 1. 在复制文件时用execlp函数,虽然有复制成功但是他就跳出整个程序,这就是一个缺陷。后来我在execlp前面加if(fork)()==0) 就可以咯 2. 硬连接不成功,老是抛出错误信息,后来发现原来是因为我的代码出错,还有我之前已经更改了目录所以就会经常报错 3. 到现在还不知道为什么我读出来的是乱码情解决 实验心得体会: 通过这次实验掌握Linux提供的文件系统调用的使用方法;熟悉文件和目录操作的调用用户接口,了解操作系统文件系统的工作原理和工作方式。 因篇幅问题不能全部显示,请点此查看更多更全内容