Linux IO编程函数接口对比表

一、标准IO函数接口(库函数)

函数名 功能 参数 返回值 特点/注意事项
fopen 打开文件 pathname:路径 mode:模式(r/r+/w/w+/a/a+) FILE*指针 失败返回NULL 建立文件流,有缓存
fclose 关闭文件 stream:文件流指针 成功0,失败EOF 刷新缓存区并释放资源
fputc 写入字符 c:字符ASCII码 stream:文件流指针 成功返回c,失败EOF 单字符操作
fgetc 读取字符 stream:文件流指针 成功返回字符,失败/EOF返回EOF 单字符操作
fputs 写入字符串 s:字符串首地址 stream:文件流指针 成功非负数,失败EOF 不自动加\n
fgets 读取字符串 s:缓冲区 size:最大长度 stream:文件流指针 成功返回s,失败/EOF返回NULL 保留\n,需手动去除
fprintf 格式化写入 stream:文件流指针 format:格式字符串 成功返回字符数,失败负数 类似printf,指定流
fscanf 格式化读取 stream:文件流指针 format:格式字符串 成功返回匹配项数,失败/EOF返回EOF 类似scanf,指定流
fwrite 二进制写入 ptr:数据地址 size:对象大小 nmemh:对象个数 stream:文件流指针 成功返回写入对象数,失败0 适合二进制文件
fread 二进制读取 ptr:缓冲区 size:对象大小 nmemh:对象个数 stream:文件流指针 成功返回读取对象数,失败/EOF返回0 适合二进制文件
fseek 移动文件指针 stream:文件流指针 offset:偏移量 whence:起始位置 成功0,失败-1 SEEK_SET/CUR/END
ftell 获取当前位置 stream:文件流指针 成功返回偏移量,失败-1 返回当前位置
rewind 重置到开头 stream:文件流指针 无返回值 相当于fseek(stream,0,SEEK_SET)
feof 检查文件结尾 stream:文件流指针 非0表示到达结尾 检测文件结束标志
ferror 检查错误 stream:文件流指针 非0表示错误 检测错误标志

二、文件IO函数接口(系统调用)

函数名 功能 参数 返回值 特点/注意事项
open 打开文件 pathname:路径 flags:标志位 mode:权限(可选) 成功返回文件描述符,失败-1 无缓存,直接系统调用
read 读取文件 fd:文件描述符 buf:缓冲区 count:字节数 成功返回读取字节数,0表示EOF,失败-1 无缓存,直接读取
write 写入文件 fd:文件描述符 buf:数据地址 count:字节数 成功返回写入字节数,失败-1 无缓存,直接写入
lseek 移动文件指针 fd:文件描述符 offset:偏移量 whence:起始位置 成功返回偏移量,失败-1 类似fseek
close 关闭文件 fd:文件描述符 成功0,失败-1 释放文件描述符

flags参数说明:

  • O_RDONLY:只读

  • O_WRONLY:只写

  • O_RDWR:读写

  • O_CREAT:不存在则创建

  • O_TRUNC:存在则清空

  • O_APPEND:追加模式

  • O_EXCL:与O_CREAT连用,文件存在则报错


三、目录IO函数接口

函数名 功能 参数 返回值 特点/注意事项
opendir 打开目录 name:目录路径 DIR*指针,失败NULL 获取目录流指针
readdir 读取目录项 dirp:目录流指针 dirent*指针,失败/EOF返回NULL 返回目录项信息
closedir 关闭目录 dirp:目录流指针 成功0,失败-1 关闭目录流
mkdir 创建目录 pathname:路径 mode:权限 成功0,失败-1 创建目录文件
rmdir 删除空目录 pathname:路径 成功0,失败-1 只能删除空目录
chdir 切换目录 path:目标路径 成功0,失败-1 改变当前工作目录
getcwd 获取当前目录 buf:缓冲区 size:缓冲区大小 成功返回buf,失败NULL 获取绝对路径

dirent结构体:

c

复制代码
struct dirent {
    ino_t d_ino;           // inode号
    off_t d_off;           // 偏移量
    unsigned short d_reclen; // 记录长度
    unsigned char d_type;   // 文件类型
    char d_name[256];      // 文件名
};

四、时间相关接口

函数名 功能 参数 返回值 特点/注意事项
time 获取时间戳 tloc:存储地址(可为NULL) 成功返回时间戳,失败-1 从1970-1-1开始的秒数
localtime 转为本地时间 timep:时间戳指针 返回tm结构体指针 包含时区信息
mktime 转为时间戳 tm:tm结构体指针 成功返回时间戳,失败-1 反向转换

tm结构体:

c

复制代码
struct tm {
    int tm_sec;   // 秒[0-59]
    int tm_min;   // 分[0-59]
    int tm_hour;  // 时[0-23]
    int tm_mday;  // 日[1-31]
    int tm_mon;   // 月[0-11]
    int tm_year;  // 年(从1900起)
    int tm_wday;  // 星期[0-6]
    int tm_yday;  // 年中日[0-365]
    int tm_isdst; // 夏令时标志
};

五、IO接口对比总结

特性 标准IO 文件IO 目录IO
头文件 <stdio.h> <fcntl.h>, <unistd.h> <dirent.h>, <sys/stat.h>
缓存 有缓存(全/行/无) 无缓存 无缓存
接口类型 库函数 系统调用 库函数/系统调用
操作对象 文件流(FILE*) 文件描述符(int) 目录流(DIR*)
适用场景 普通文件 设备文件、通信文件 目录文件
性能 较高(有缓存) 较低(无缓存) 中等
移植性 高(ANSI C标准) 较低(POSIX标准) 较低(POSIX标准)
使用难度 较低 较高 中等

六、常用关系对应表

标准IO函数 文件IO对应 说明
fopen open 打开文件
fclose close 关闭文件
fread/fgetc read 读取数据
fwrite/fputc write 写入数据
fseek lseek 移动指针
ftell lseek(fd,0,SEEK_CUR) 获取位置
rewind lseek(fd,0,SEEK_SET) 重置到开头
stdin 文件描述符0 标准输入
stdout 文件描述符1 标准输出
stderr 文件描述符2 标准错误
相关推荐
小同志004 分钟前
application.properties 和 application.yml
java·spring boot·spring·application.yml·.properities
甄心爱学习13 分钟前
【项目实训(个人10)】
开发语言·前端·javascript
唐青枫14 分钟前
Java JdbcTemplate 实战指南:用 Spring 轻量完成数据库增删改查
java·spring boot·spring
未秃头的程序猿16 分钟前
别再让大模型单打独斗了!Java 多 Agent 协作实战:任务拆解+结果聚合
java·后端·ai编程
右耳朵猫AI18 分钟前
Java & JVM技术周刊 2026年第20周
java·开发语言·jvm
人道领域20 分钟前
【LeetCode刷题日记】538.把二叉搜索树转换为累加树
java·开发语言·后端·算法·leetcode
铁皮哥20 分钟前
【后端开发】什么是守护线程,和普通线程有什么区别?
java·开发语言·数据库·人工智能·python·spring·intellij-idea
西凉的悲伤23 分钟前
Spring Boot + ShardingSphere 介绍
java·spring boot·后端·shardingsphere·分库分表
并不喜欢吃鱼23 分钟前
从零开始 C++----- 十二【C++ 数据结构】map/set 全解析:从使用到红黑树底层模拟实现
开发语言·数据结构·c++
枫叶丹425 分钟前
【HarmonyOS 6.0】Live View Kit 实况窗开发详解:进度胶囊支持副文本功能探究
开发语言·华为·harmonyos