视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
操作系统实验5文件系统:Linux文件管理
2025-10-06 11:50:11 责编:小OO
文档
实验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

  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

  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

      perror("Link");

    else

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

}

打开文件:

 

写文件:

读文件:

复制文件:

修改权限:

查看权限:

创建目录:

删除目录:

更改目录:

硬连接:

问题解决方案:

1.在复制文件时用execlp函数,虽然有复制成功但是他就跳出整个程序,这就是一个缺陷。后来我在execlp前面加if(fork)()==0)

就可以咯

2.硬连接不成功,老是抛出错误信息,后来发现原来是因为我的代码出错,还有我之前已经更改了目录所以就会经常报错

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

实验心得体会:

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

  下载本文

显示全文
专题