搜档网
当前位置:搜档网 › 操作系统实验5文件系统:Linux文件管理

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

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

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

1.实验目的

(1)掌握Linux提供的文件系统调用的使用法;

(2)熟悉文件和目录操作的系统调用用户接口;

(3)了解操作系统文件系统的工作原理和工作式。

2.实验容

(1)利用Linux有关系统调用函数编写一个文件工具filetools,要求具有下列功能:***********

0. 退出

1. 创建新文件

2. 写文件

3. 读文件

4. 复制文件

5. 修改文件权限

6. 查看文件权限

7. 创建子目录

8. 删除子目录

9. 改变当前目录到指定目录

10. 操作

***********

代码:

#include

#include

#include

#include

#include

#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);

void ylj(void);

int main()

{

int choose;

int suliangjin=1;

menu();

scanf("%d",&choose);

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",&choose);

}

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 openfile(void)

{

int fd;

if((fd=open("/tmp/hello.c",O_CREAT|O_TRUNC|O_RDWR,0666))<0) perror("open");

else

printf("open file:hileo.c %d\n",fd);

if(close(fd)<0)

perror("close");

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",O_CREAT|O_TRUNC|O_RDWR,0666))<0) perror("open");

else

printf("open file:hileo.c %d\n",fd);

if((size=write(fd,buf,len))<0)

perror("write");

else

printf("Write:%s\n",buf);

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",O_CREAT|O_TRUNC|O_RDWR,0666))<0) perror("open");

else

printf("open file:hileo.c %d\n",fd);

lseek(fd,0,SEEK_SET);

if((size=read(fd,b,10))<0)

perror("read");

else

printf("read from file:%s\n",b);

if(close(fd)<0)

perror("close");

else

printf("Close hello.c\n");

}

void copyfile(void)

{

if(fork()==0)

execlp("/bin/cp","cp","/tmp/hello.c","/tmp/he.c",NULL);

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",&a);

switch(a)

{

case 1:chmod("/tmp/hello.c",S_IRWXU);printf("ok!\n");break;

case 2:chmod("/tmp/hello.c",S_IRUSR);printf("ok!\n");break;

case 3:chmod("/tmp/hello.c",S_IWUSR);printf("ok!\n");break;

case 4:chmod("/tmp/hello.c",S_IXUSR);printf("ok!\n");break;

default:printf("您选择有误\n");

}

}

void ckqx(void)

{

char *path="/bin/ls";

char *argv[4]={"ls","-l",NULL};

if(fork()==0)

execv(path,argv);

else

wait(0);

}

void cjml(void)

{

if(mkdir("/tmp/a",S_IRWXU)<0)

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","h.c")<0)

perror("Link");

else

printf("建立硬连接\n"); }

打开文件:

写文件:

读文件:复制文件:

修改权限:

查看权限:

创建目录:

删除目录:

更改目录:

硬连接:

问题解决案:

1.在复制文件时用execlp函数,虽然有复制成功但是他就跳出整个程序,这就是一个缺

陷。后来我在execlp前面加if(fork)()==0)

就可以咯

2.硬连接不成功,老是抛出错误信息,后来发现原来是因为我的代码出错,还有我之前已

经更改了目录所以就会经常报错

3.到现在还不知道为什么我读出来的是乱码情解决

实验心得体会:

通过这次实验掌握Linux提供的文件系统调用的使用法;熟悉文件和目录操作的调用用户接口,了解操作系统文件系统的工作原理和工作式。

相关主题