Linux文件系统

1.实验目的

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

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

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

2.实验内容

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

0. 退出

1. 创建新文件

2. 写文件

3. 读文件

4. 复制文件

5. 修改文件权限

6. 查看文件权限

7. 创建子目录

8. 删除子目录

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

10. 链接操作

 

Reporting

在linux下使用g++编译gets函数会报错,换成fgets就好,fgets的具体用法见https://www.cnblogs.com/52php/p/5724372.html

还有链接操作,之前没怎么接触过,ln -s file1 file2 软链接,不加-s为硬链接

 

Code

#include <bits/stdc++.h>

using namespace std;

void creat()
{
    cout << "file name >> ";
    char name[30], order[65];
    cin >> name;


    strcpy(order, "touch ");
    strcat(order, name);
    //cout << order << endl;
    system(order);

}

void write()
{
    char name[30];
    cout << "file name >> ";
    cin >> name;

    char order[65];
    strcpy(order, "vim ");
    strcat(order, name);
    system(order);
}

void read()
{
    write();
}

void copy()
{
    char from[50], to[50];
    cout << "from where to where >> ";
    cin >> from ;
    cin >> to;

    char order[105];

    strcpy(order, "cp ");
    strcat(order, from);
    strcat(order, " ");
    strcat(order, to);

    system(order);

}

void chmod()
{
    char name[30];
    cout << "file name >> ";
    cin >> name;

    char power[30];
    cout << "power >> ";
    cin >> power;

    char order[60];
    strcpy(order, "chmod ");
    strcat(order, power);
    strcat(order, " ");
    strcat(order, name);

    system(order);
}

void check()
{
    char order[65];
    strcpy(order, "ls -l ");
    char name[35];

    cout << "name >> ";
    cin >> name;
    strcat(order, name);

    system(order);
}

void mkdir()
{
    char name[30];
    char order[65];

    cout << "name >> ";
    cin >> name;

    strcpy(order, "mkdir ");
    strcat(order, name);

    system(order);
}

void rmdir()
{
    char name[30];
    char order[65];

    cout << "name >> ";
    cin >> name;

    strcpy(order, "rm -rf ");
    strcat(order, name);

    system(order);
}

void mvdir()
{
    char from[40], to[40];

    cout << "from >> ";
    cin >> from;
    cout << "to >> ";
    cin >> to;

    char order[70];

    strcpy(order, "mv ");
    strcat(order, from);
    strcat(order, " ");
    strcat(order, to);

}

void link()
{
    char command1[35];
    char command2[35];
    char command[105];

    getchar();

    cout << "file1 >> ";
    fgets(command1, 34, stdin);

    command1[strlen(command1) - 1] = '\0';

    cout << "file2 >> ";
    fgets(command2, 34, stdin);


    strcpy(command, "ln -s ");

    strcat(command, command1);
    strcat(command, " ");
    strcat(command, command2);

    system(command);
}

void select()
{
    cout << "0.exit" << endl;
    cout << "1.creat" << endl;
    cout << "2.write" << endl;
    cout << "3.read" << endl;
    cout << "4.copy" << endl;
    cout << "5.chmod" << endl;
    cout << "6.check" << endl;
    cout << "7.mkdir" << endl;
    cout << "8.rmdir" << endl;
    cout << "9.mvdir" << endl;
    cout << "10.link" << endl;

    int n;

    cout << "select >> ";
    cin >> n;

    switch (n)
    {
        case 0 : break;
        case 1 : creat(); break;
        case 2 : write(); break;
        case 3 : read(); break;
        case 4 : copy(); break;
        case 5 : chmod(); break;
        case 6 : check(); break;
        case 7 : mkdir(); break;
        case 8 : rmdir(); break;
        case 9 : mvdir(); break;
        case 10 : link(); break;
    }

    if (n == 0) exit(0);
}


int main()
{
    while (true)
    {
        select();
    }
    return 0;
}

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水能zai舟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值