一、标准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 标准错误
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐