您的当前位置:首页正文

操作系统实验5文件系统:Linux文件管理

来源:九壹网


实验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提供的文件系统调用的使用方法;熟悉文件和目录操作的调用用户接口,了解操作系统文件系统的工作原理和工作方式。

因篇幅问题不能全部显示,请点此查看更多更全内容

Top