【操作系统实验】为Linux系统设计一个简单的文件系统

【要求】

为Linux系统设计一个简单的文件系统。要求做到以下几点:

(1)可以实现下列几条命令 ;

dir     列文件目录

create  创建文件

delete  删除文件

read    读文件

write   写文件

(2)列目录时要列出文件名、存取权限(八进制)、文件长度、时间(三种);

(3)源文件可以进行读写保护。

【代码实现】

----> 头文件

#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <string.h>
#include <dirent.h>
#include <time.h>

----->// 定义文件信息结构体

struct FileInfo {
    char name[256];      // 文件名
    int permission;      // 存取权限
    int length;          // 文件长度
    time_t createTime;   // 创建时间
    time_t modifyTime;   // 修改时间
};

---->// 列出文件目录

// 列出文件目录
void dir() {
    cout << "文件目录:" << endl;
    // 遍历当前目录下的所有文件
    DIR* dir;               // 目录指针
    struct dirent* ent;     // 目录项结构体
    if ((dir = opendir(".")) != NULL) {  // 打开当前目录
        while ((ent = readdir(dir)) != NULL) {  // 读取目录中的每一项
            struct stat st;
            stat(ent->d_name, &st);  // 获取文件信息
            cout << "文件名:" << ent->d_name << endl;
            cout << "存取权限:" << oct << (st.st_mode & 0777) << endl;
            cout << "文件长度:" << st.st_size << " 字节" << endl;
            cout << "创建时间:" << ctime(&st.st_ctime);
            cout << "修改时间:" << ctime(&st.st_mtime);
            cout << "-------------------" << endl;
        }
        closedir(dir);  // 关闭目录
    } else {
        cerr << "无法打开当前目录!" << endl;
    }
}

---->// 创建文件

void create(const char* filename) {
    mode_t mode = S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH; //指定权限为644
    FILE* file = fopen(filename, "w");
    if (file != NULL) {
        printf("成功创建文件:%s\n", filename);
        fclose(file);
        // 设置文件权限
        chmod(filename, mode);
        printf("已将文件%s设置为指定权限\n", filename);
    } else {
        perror("创建文件失败!");
    }
}

---->// 写入文件内容

void write(const string& filename) {
    ofstream file(filename.c_str(), ios::app);  // 打开文件进行追加写操作
    if (file) {
        string content;
        cout << "请输入要写入的内容(输入EOF结束):" << endl;
        while (getline(cin, content)) {
            if (content == "EOF") {
                break;
            }
            file << content << endl;
        }
        file.close();
    } else {
        cerr << "打开文件失败!" << endl;
    }
}

---->// 读取文件内容

void read(const string& filename) {
    ifstream file(filename.c_str());  // 打开文件进行读操作
    if (file) {
        string line;
        while (getline(file, line)) {
            cout << line << endl;
        }
        file.close();
    } else {
        cerr << "打开文件失败!" << endl;
    }
}

---->// 删除文件

void remove(const string& filename) {
    if (remove(filename.c_str()) == 0) {  // 删除文件
        cout << "成功删除文件:" << filename << endl;
    } else {
        cerr << "删除文件失败!" << endl;
    }
}

---->主函数

int main() {
    while (true) {
        printf("________________________欢迎_______________________________\n");
        printf("-----------------------------------------------------------\n");
        printf("************* Welcome to Fu's Linux system! ***************\n\n");
        cout << "请选择操作:1.列文件目录 2.创建文件 3.删除文件 4.读文件 5.写文件 6.退出" << endl;
        int choice;
        cin >> choice;
        cin.ignore(); // 忽略换行符

        switch (choice) {
            case 1:
                dir();
                break;
            case 2:
                cout << "请输入要创建的文件名:";
                string createFilename;
                getline(cin, createFilename);
                create(createFilename);
                break;
            case 3:
                cout << "请输入要删除的文件名:";
                string deleteFilename;
                getline(cin, deleteFilename);
                remove(deleteFilename);
                break;
            case 4:
                cout << "请输入要读取的文件名:";
                string readFilename;
                getline(cin, readFilename);
                read(readFilename);
                break;
            case 5:
                cout << "请输入要写入的文件名:";
                string writeFilename;
                getline(cin, writeFilename);
                write(writeFilename);
                break;
            case 6:
                return 0;
            default:
                cout << "无效的选择!" << endl;
                break;
        }
    }

    return 0;
}

  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
文件系统是计算机操作系统中的一个重要组成部分,它为用户提供了管理文件和目录的接口,使得用户可以方便地存储和获取自己的数据。在Linux系统中,文件系统是由内核提供的,通过挂载的方式将其连接到用户空间。为了更好地理解文件系统的工作原理和实现方式,可以通过实验的方式来进行深入学习。下面我将介绍一下Linux下C语言实现文件系统实验的实验分析。 实验目的: 通过本实验,可以了解文件系统的工作原理和实现方式,掌握文件系统设计和实现方法,加深对文件系统的理解和应用。 实验内容: 1. 设计一个简单文件系统,支持创建、删除、读取和写入文件,并能够管理文件和目录。 2. 使用C语言实现文件系统的各个模块,包括文件系统的格式化、文件和目录的创建、删除和管理等。 3. 在Linux系统上进行测试,验证文件系统的正确性和可靠性。 实验步骤: 1. 设计文件系统的数据结构和布局,包括超级块、inode表、目录项、数据块等。 2. 实现文件系统的格式化程序,将磁盘空间划分为固定大小的块,并初始化超级块和inode表。 3. 实现文件和目录的创建和删除程序,包括创建文件和目录、删除文件和目录等操作。 4. 实现文件和目录的读取和写入程序,包括从磁盘读取文件和目录数据、将数据写入到磁盘等操作。 5. 实现文件和目录的管理程序,包括查找文件和目录、更新文件和目录的属性等操作。 6. 编写测试程序,验证文件系统的正确性和可靠性,包括创建文件和目录、读取和写入文件、删除文件和目录等操作。 实验结果: 通过实验,可以实现一个简单文件系统,支持基本的文件和目录操作,并能够在Linux系统上进行测试。实验结果可以验证文件系统的正确性和可靠性,同时也可以加深对文件系统的理解和应用。 总结: Linux下C语言实现文件系统实验是一项非常有意义的实验,它可以帮助我们深入理解文件系统的工作原理和实现方式,掌握文件系统设计和实现方法,加深对文件系统的理解和应用。通过实验,可以实现一个简单文件系统,验证其正确性和可靠性,并为后续研究和应用提供一定的基础。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值