求职笔记. C语言 . IO

文件IO

一、C语言文件指针

文件指针是C语言中用于操作文件的核心概念,本质是一个指向FILE结构体的指针。该结构体由标准库定义(位于stdio.h),包含文件描述符、缓冲区状态、文件位置指针等元数据。

特性与作用:

  1. 句柄功能:通过fopen返回的FILE*指针作为文件操作的唯一标识,所有读写函数(如fprintffread)均需通过此指针访问文件。
  2. 缓冲区管理:文件指针关联的缓冲区由系统自动管理,减少频繁的磁盘I/O操作,提升效率。
  3. 错误检测:若文件打开失败(如路径错误),fopen返回NULL,需通过判断指针有效性避免后续操作崩溃。

二、fopenmode参数详解
fopen函数原型为:

c
FILE* fopen(const char* filename, const char* mode);

mode参数决定文件的打开方式和操作权限,具体模式如下:

  1. 基本模式

    模式说明
    "r"只读模式,文件必须存在
    "w"只写模式,文件存在则清空内容;不存在则新建
    "a"追加模式,在文件末尾写入数据,文件不存在则新建
  2. 读写组合模式

    模式说明
    "r+"读写模式,文件必须存在,可任意位置读写
    "w+"读写模式,文件存在则清空内容;不存在则新建
    "a+"读写追加模式,可读取文件,但写入仅在末尾追加
  3. 二进制模式(b后缀)
    在基础模式后添加b(如"rb""wb+"),表示以二进制方式操作文件,适用于非文本数据(如图片、音频)。区别:

    • 文本模式:自动处理换行符(如Windows中\r\n转换为\n)。
    • 二进制模式:直接读写原始字节,无转换。
  4. C11新增模式(x后缀)
    "wx""wbx",特点:

    • 若文件已存在,则打开失败(避免意外覆盖)。
    • 支持独占访问(其他进程无法同时操作)。

三、使用示例与注意事项

  1. 示例代码:

    c
    FILE *fp = fopen("data.txt", "r+");  
    if (fp == NULL) {  
        perror("Error opening file");  
        exit(1);  
    }  
    // 读写操作...  
    fclose(fp);
  2. 注意事项:

    • 文件路径:使用绝对路径时需注意转义(如C:\\file.txt)。
    • 模式冲突:"w""w+"会清空文件内容,需谨慎选择。
    • 资源释放:操作完成后必须调用fclose关闭文件,防止内存泄漏]。

四、适用场景推荐

  • 文本处理:优先使用"r""w"等文本模式。
  • 跨平台二进制文件:使用"rb""wb"确保兼容性]。
  • 日志追加:选择"a""a+"模式避免覆盖历史数据]。

通过合理选择mode参数,可实现灵活高效的文件操作。具体模式组合需根据实际读写需求及文件类型决定]。

求职笔记 . Linux内核 . 函数
Linux驱动开发概览