实验四 文件系统

实验四 文件系统
一、实验目的
1、熟悉Linux文件系统的文件和目录结构,掌握Linux文件系统的基本特征;
2、模拟实现Linux文件系统的简单I/O流操作:备份文件。
二、实验内容
1、浏览Linux系统根目录下的子目录,熟悉每个目录的文件和功能;
2、设计程序模拟实现Linux文件系统的简单I/O流操作:备份文件。
3、利用C库函数fopen(), fread(), fwrite(), fclose() 来实现简单的文件备份, 即将一个文件的内容拷贝到另一个文件中去。
三、实验流程图

实验四 文件系统_第1张图片
首先要创建一个的原文件和备份的文件,这里以txt为后缀名创建
下面是我的文件内容11.txt为原文件,22.txt为备份文件

实验四 文件系统_第2张图片
实验四 文件系统_第3张图片
四:源代码

#include 
#include 
#include 

#define BUF_SIZE 4396
#define src_path "11.txt"
#define dst_path "22.txt"
int main(void) {
        char buf[BUF_SIZE];
        FILE *source, *backup;
        long  ret;
        clock_t start, end;
        double time;

        source = fopen( src_path, "rb");
        backup = fopen( dst_path, "wb");


if (!source) {
                printf("Error in opening file.\n");
                exit(1);
        }
else{
printf("opening file successfully.\n");
}
        if (!backup) {
                printf("Error in creating file.\n");
                exit(1);
        }
else{
printf("creating file successfully.\n");
}

        // 备份
        start = clock();  // 开始计时
        int t = 0;
        while (fread(buf, BUF_SIZE, 1, source) == 1) {
                fwrite(buf, BUF_SIZE, 1, backup);
                t++;
        }
        fseek(source, BUF_SIZE*t, SEEK_SET);  // 重定位
        ret = fread(buf, 1, BUF_SIZE, source);
        fwrite(buf, 1, ret, backup);
        end = clock();  // 结束计时

        if (fclose(source)) {
                printf("Error in close file:source.\n");
                exit(1);
        }
else{
printf("close file:source successfully.\n");
}

        if (fclose(backup)) {
                printf("Error in close file:backup.\n");
                exit(1);
        }
else{
printf("close file:backup successfully.\n");
}

        time =((double)(end - start)/ CLOCKS_PER_SEC);
        printf("运行时间:%f s\n", time);
}

五、实验结果
为了方便观察备份情况,输出打开和关闭过程成功,用clock()函数记录备份过程的时间,运行结果如下。
实验四 文件系统_第4张图片
打开备份文件,可以观察到原文件内容备份到备份文件中。
实验四 文件系统_第5张图片
六、使用系统调用函数实现文件备份
要求:使用系统调用函数open(),read(),write(),close()实现简单文件备份
由于原理类似,这里直接展示源代码

#include 
#include 
#include 
#include 
#include 
#include 

#define BUF_SIZE 4396
#define src_path "11.txt"
#define dst_path "22.txt"

int main(void) {
        char buf[BUF_SIZE];
        int source, backup;
        long  ret;

        source = open(src_path, 0);
        backup = open(dst_path, O_WRONLY|O_CREAT, S_IRUSR|S_IWUSR);

        if (source == -1) {
                printf("Error in opening file.\n");
                exit(1);
        }
        else{
                printf("Opening file sussefully.\n");

        }

  if (backup == -1) {
                printf("Error in creating file.\n");
                exit(1);
        }
        else{
                printf("creating file sussefully.\n");

        }
        // 备份
        while((ret = read(source, buf, BUF_SIZE)) != 0){
                if(ret == -1){
                        printf("Error in reading file.\n");
                        exit(1);
                }
                else{
               printf("reading file sussefully.\n");

                }
                int status = write(backup, buf, ret);
                if(status == -1){
                        printf("Error in writing file.\n");
                        exit(1);
                }
                else{
               printf("writing file sussefully.\n");

               }
        }

        if(close(source) == -1){
                printf("Close error.\n");
                exit(1);
        }
        else{
              printf("close source sussefully.\n");

        }
        if(close(backup) == -1){
                printf("Close error.\n");
        exit(1);
        }
        else{
             printf("close backup sussefully.\n");

}
}

你可能感兴趣的:(实验四 文件系统)