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 标准错误
相关推荐
ZHOUPUYU7 小时前
PHP 8.3网关优化:我用JIT将QPS提升300%的真实踩坑录
开发语言·php
寻寻觅觅☆11 小时前
东华OJ-基础题-106-大整数相加(C++)
开发语言·c++·算法
l1t12 小时前
在wsl的python 3.14.3容器中使用databend包
开发语言·数据库·python·databend
青云计划12 小时前
知光项目知文发布模块
java·后端·spring·mybatis
赶路人儿12 小时前
Jsoniter(java版本)使用介绍
java·开发语言
ceclar12313 小时前
C++使用format
开发语言·c++·算法
探路者继续奋斗13 小时前
IDD意图驱动开发之意图规格说明书
java·规格说明书·开发规范·意图驱动开发·idd
码说AI13 小时前
python快速绘制走势图对比曲线
开发语言·python
Gofarlic_OMS13 小时前
科学计算领域MATLAB许可证管理工具对比推荐
运维·开发语言·算法·matlab·自动化
星空下的月光影子13 小时前
易语言开发从入门到精通:补充篇·网络爬虫与自动化采集分析系统深度实战·HTTP/HTTPS请求·HTML/JSON解析·反爬策略·电商价格监控·新闻资讯采集
开发语言