• linux文件操作


    文章目录

    1、fopen()

    用于打开或创建文件,在打开或创建文件时可以指定文件的属性及用户的权限等各种参数

    函数声明:

    #include 
    FILE *fopen(const char *__restrict__ __filename, const char *__restrict__ __modes)
    
    • 1
    • 2
    • restrict __filename : 字符串,表示要打开的文件名称。
    • restrict __modes :字符串,表示文件的访问模式,具体如下所示:

    “r” 打开一个用于读取的文件。该文件必须存在。
    “w” 创建一个用于写入的空文件。如果文件名称与已存在的文件相同,则会删除已有文件的内容,文件被视为一个新的空文件。
    “a” 追加到一个文件。写操作向文件末尾追加数据。如果文件不存在,则创建文件。
    “r+” 打开一个用于更新的文件,可读取也可写入。该文件必须存在。
    “w+” 创建一个用于读写的空文件。
    “a+” 打开一个用于读取和追加的文件。

    函数返回值:

    该函数返回一个 FILE 指针。否则返回 NULL,且设置全局变量 errno 来标识错误。

    实例1:

    uint8_t text_file() {
        /*
        "w"	创建一个用于写入的空文件。如果文件名称与已存在的文件相同,
        则会删除已有文件的内容,文件被视为一个新的空文件。
        */
    
        FILE* fp;
    
        fp = fopen("file.txt", "w+");
        if (!fp) {
            puts("Fail to open file!");
        }
        fprintf(fp, "%s %s %s %d", "We", "are", "in", 2022);
    
        fclose(fp);
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    结果:

    在这里插入图片描述

    实例2:

    uint8_t text_file_add() {
        /*
         a+ :打开一个用于读取和追加的文件。
        */
    
        FILE* fp;
    
        fp = fopen("file.txt", "a+");
        if (!fp) {
            puts("Fail to open file!");
        }
        fprintf(fp, " %s", "new world");
    
        fclose(fp);
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    结果:

    在这里插入图片描述

    2、fread()

    用于从文件中读入一定大小数据到指定的地址中。

    函数原型

    size_t fread(void *__restrict____ptr, size_t __size, size_t__n, FILE *__restrict__ __stream)
    
    • 1
    • __restrict____ptr :这是指向带有最小尺寸 size*nmemb 字节的内存块的指针。
    • size_t __size :这是要读取的每个元素的大小,以字节为单位。
    • size_t__n :这是元素的个数,每个元素的大小为 size 字节。
    • restrict __stream: 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输入流。

    函数返回值

    成功读取的元素总数会以 size_t 对象返回,size_t 对象是一个整型数据类型。如果总数与 nmemb 参数不同,则可能发生了一个错误或者到达了文件末尾。

    实例 1:

    uint8_t text_file_fread() {
        FILE* fp;
        char c[] = "We are in 2022 new world";
        char buffer[30];
    
        /* 打开文件用于读写 */
        fp = fopen("file.txt", "w+");
    
        /* 写入数据到文件 */
        fwrite(c, sizeof(c), 1, fp);
    
        /* 查找文件的开头 */
        fseek(fp, 0, SEEK_SET);
    
        /* 读取并显示数据 */
        fread(buffer, sizeof(c), 1, fp);
        printf("%s\n", buffer);
        fclose(fp);
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    结果:

    在这里插入图片描述

    3、fwrite()

    函数声明

    往文件里面写信息

    size_t fwrite(const void *__restrict____ptr, size_t __size, size_t __n, FILE *__restrict____s)
    
    • 1
    • __restrict____ptr :这是指向要被写入的元素数组的指针。
    • size_t __size :这是要被写入的每个元素的大小,以字节为单位。
    • size_t __n :这是元素的个数,每个元素的大小为 size 字节。
    • __restrict____s :这是指向 FILE 对象的指针,该 FILE 对象指定了一个输出流。

    函数返回值

    如果成功,该函数返回一个 size_t 对象,表示元素的总数,该对象是一个整型数据类型。如果该数字与 nmemb 参数不同,则会显示一个错误。

    实例1:

    uint8_t text_file_fwrite() {
        FILE* fp;
        char str[55];
        memset(str,'B',55);
    
        fp = fopen("file.txt", "w");
        fwrite(str,sizeof(char), sizeof(str)/sizeof(char), fp);
    
        fclose(fp);
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    结果

    在这里插入图片描述

    实例 2

    uint8_t text_file_fwrite() {
        FILE* fp;
        char str[] = "we are in 2060";
    
        fp = fopen("file.txt", "w");
        fwrite(str,sizeof(char), sizeof(str)/sizeof(char)-1, fp);
    
        fclose(fp);
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    结果

    在这里插入图片描述

    注意

    如果:

    fwrite(str,sizeof(char), sizeof(str)/sizeof(char), fp);
    
    • 1

    结果:
    在这里插入图片描述

    4、fseek()

    实现偏移

    函数原型:

    int fseek(FILE *c, long __off, int __whence)
    
    • 1
    • __stream:这是指向 FILE 对象的指针,该 FILE 对象标识了流。
    • __off:这是相对 whence 的偏移量,以字节为单位。
    • __whence:这是表示开始添加偏移 offset 的位置。它一般指定为下列常量之一

    SEEK_SET 文件的开头
    SEEK_CUR 文件指针的当前位置
    SEEK_END 文件的末尾

    函数返回值:

    如果成功,则该函数返回零,否则返回非零值。

    实例:

    uint8_t text_file_fseek() {
        FILE* fp;
    
        fp = fopen("file.txt", "w+");
        fputs("we are in 2060", fp);
    
        fseek(fp, 7, SEEK_SET); // 根据偏移掺入数据
        fputs("where are you from ?", fp);
        fclose(fp);
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    结果:

    在这里插入图片描述

    5、ftell()

    函数原型:

    long ftell(FILE *__stream)
    
    • 1
    • __stream:这是指向 FILE 对象的指针,该 FILE 对象标识了流。

    函数返回值:

    该函数返回位置标识符的当前值。如果发生错误,则返回 -1L,全局变量 errno 被设置为一个正值。

    实例:

    uint8_t text_file_ftell() {
        FILE* fp;
        int len;
    
        fp = fopen("file.txt", "r");
        if (fp == NULL) {
            perror("打开文件错误");
            return (-1);
        }
        fseek(fp, 0, SEEK_END);
    
        len = ftell(fp);
        fclose(fp);
    
        printf("file.txt 的总大小 = %d 字节\n", len);
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    结果:

    在这里插入图片描述

    6、fclose()

    函数原型:

    int fclose(FILE *__stream)
    
    • 1
    • __stream:这是指向 FILE 对象的指针,该 FILE 对象标识了流。

    函数返回值:

    如果流成功关闭,则该方法返回零。如果失败,则返回 EOF。

    实例:

    前面每一个例子都要用到
    参考:

    1、C语言fopen函数的用法,C语言打开文件详解
    2、fopen 菜鸟
    3、fread 菜鸟
    4、fwrite 菜鸟
    5、fseek 菜鸟
    6、ftell 菜鸟
    7、fclose 菜鸟

  • 相关阅读:
    C++中的继承
    从简单代码入手,分析线程池原理
    JavaScript-typeof方法
    element-UI 列表渲染图片,后台回传Base64
    nvm管理(切换)node版本,方便vue2,vue3+ts开发
    Ompal138+Spartan-6 FPGA开发板规格软硬件资料数据手册
    六、Zabbix — Proxy分布式监控
    (附源码)springboot码头作业管理系统 毕业设计 341654
    每日五道java面试题之springMVC篇(二)
    QRegExp(正则表达式)
  • 原文地址:https://blog.csdn.net/qq_43441284/article/details/126362049