stdio
stdio (Standard Input/Output) 提供 POSIX 标准扩展的文件流操作接口,支持通过文件描述符关联流、获取流对应描述符、以及基于 off_t 类型的文件定位与位置查询。
头文件清单
接口清单
| 接口名称 | 功能简述 |
|---|---|
| dprintf | 向指定文件描述符输出格式化字符串 |
| fdopen | 将文件描述符与标准I/O流关联 |
| fileno | 获取文件流对应的文件描述符 |
| fseeko | 移动文件流的读写位置(off_t偏移) |
| ftello | 获取文件流的当前读写位置(off_t类型) |
Functions
dprintf
头文件清单
功能说明
- 向指定的文件描述符输出格式化字符串
- 不需要创建 FILE 对象,直接通过文件描述符进行输出
- 输出内容按 format 字符串指定的格式进行排版
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| fd | int | 目标文件描述符 | 0 ~ FD_SETSIZE-1 |
| format | const char *__restrict | 格式化字符串 | 不为NULL |
| ... | 可变参数 | 可变参数,与 format 中的格式说明符一一对应 | - |
返回值
- 返回类型:int
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 正整数 | 成功输出的字符数 | 输出成功 |
| 负整数 | 输出失败 | 写入错误或编码错误 |
fdopen
头文件清单
功能说明
- 将一个已打开的文件描述符与标准 I/O 流关联,返回 FILE 指针
- mode 参数指定流的访问模式(读/写/追加),需与文件描述符的打开模式兼容
- 支持模式字符串中的 'e' 标志,用于设置 FD_CLOEXEC
前置条件
- 调用时序约束:传入的文件描述符必须已通过 open() 等接口成功打开
- 依赖关系:mode 字符串的首字符必须为 'r'、'w' 或 'a',且需与文件描述符的实际打开模式兼容
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| fd | int | 已打开的文件描述符 | 0 ~ FD_SETSIZE-1 |
| mode | const char * | 文件访问模式字符串 | 首字符必须为 'r'/'w'/'a' |
返回值
- 返回类型:FILE *
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| FILE * | 成功关联的文件流指针 | 文件描述符有效且模式兼容 |
| NULL | 关联失败 | 文件描述符无效或模式不兼容 |
fileno
头文件清单
功能说明
- 获取参数 stream 指定的文件流所使用的文件描述符
- 若文件流已关闭,则返回 -1 并设置 errno 为 EBADF
- 通过文件流反查底层文件描述符
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| stream | FILE * | 文件流指针 | 不为NULL,且未关闭 |
返回值
- 返回类型:int
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 非负整数 | 文件描述符 | 文件流有效 |
| -1 | 获取失败 | 文件流已关闭或无效,errno 设为 EBADF |
参考案例
application/wearable/nativeapp/nativeui/main/src/dial/DialVideoView.cpp
fseeko
头文件清单
功能说明
- 移动文件流的读写位置,偏移量类型为 off_t
- whence 参数指定偏移起始位置:SEEK_SET(文件开头)、SEEK_CUR(当前位置)、SEEK_END(文件末尾)
- 调用前会刷新写缓冲区,调用后丢弃读缓冲区
前置条件
- 调用时序约束:文件流必须已通过 fopen() 或 fdopen() 等接口成功打开
- 依赖关系:whence 参数必须为 SEEK_SET、SEEK_CUR 或 SEEK_END 之一
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| stream | FILE * | 文件流指针 | 不为NULL |
| offset | off_t | 偏移量 | - |
| whence | int | 偏移起始位置 | SEEK_SET(0) / SEEK_CUR(1) / SEEK_END(2) |
返回值
- 返回类型:int
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 0 | 定位成功 | 偏移量与起始位置有效 |
| -1 | 定位失败 | whence 参数无效或底层 seek 失败,errno 设为 EINVAL |
参考案例
ohos/third_party/zlib/contrib/minizip/ioapi.c
ftello
头文件清单
功能说明
- 获取文件流的当前读写位置,返回值类型为 off_t
- 返回值包含缓冲区中未读取/未写入数据的修正
- 当偏移量超出 long 范围时,与 ftell 不同,ftello 不会产生 EOVERFLOW 错误
前置条件
- 调用时序约束:文件流必须已通过 fopen() 或 fdopen() 等接口成功打开
- 依赖关系:文件流需可定位(非管道、套接字等不可定位流)
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| stream | FILE * | 文件流指针 | 不为NULL |
返回值
- 返回类型:off_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 非负 off_t 值 | 当前读写位置 | 文件流有效且可定位 |
| -1 | 获取失败 | 底层 seek 操作失败 |
参考案例
ohos/third_party/zlib/contrib/minizip/ioapi.c