跳转至

stdio

stdio (Standard Input/Output) 提供 POSIX 标准扩展的文件流操作接口,支持通过文件描述符关联流、获取流对应描述符、以及基于 off_t 类型的文件定位与位置查询。

头文件清单

#include "open_source/musl/include/stdio.h"

接口清单

接口名称 功能简述
dprintf 向指定文件描述符输出格式化字符串
fdopen 将文件描述符与标准I/O流关联
fileno 获取文件流对应的文件描述符
fseeko 移动文件流的读写位置(off_t偏移)
ftello 获取文件流的当前读写位置(off_t类型)

Functions

dprintf

int dprintf(int, const char *__restrict, ...)

头文件清单

#include "open_source/musl/include/stdio.h"

功能说明

  • 向指定的文件描述符输出格式化字符串
  • 不需要创建 FILE 对象,直接通过文件描述符进行输出
  • 输出内容按 format 字符串指定的格式进行排版

入参

名称 参数类型 详细说明 约束取值范围
fd int 目标文件描述符 0 ~ FD_SETSIZE-1
format const char *__restrict 格式化字符串 不为NULL
... 可变参数 可变参数,与 format 中的格式说明符一一对应 -

返回值

  • 返回类型:int
返回值 文字含义 触发场景
正整数 成功输出的字符数 输出成功
负整数 输出失败 写入错误或编码错误

fdopen

FILE *fdopen(int, const char *)

头文件清单

#include "open_source/musl/include/stdio.h"

功能说明

  • 将一个已打开的文件描述符与标准 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

int fileno(FILE *)

头文件清单

#include "open_source/musl/include/stdio.h"

功能说明

  • 获取参数 stream 指定的文件流所使用的文件描述符
  • 若文件流已关闭,则返回 -1 并设置 errno 为 EBADF
  • 通过文件流反查底层文件描述符

入参

名称 参数类型 详细说明 约束取值范围
stream FILE * 文件流指针 不为NULL,且未关闭

返回值

  • 返回类型:int
返回值 文字含义 触发场景
非负整数 文件描述符 文件流有效
-1 获取失败 文件流已关闭或无效,errno 设为 EBADF

参考案例

  • application/wearable/nativeapp/nativeui/main/src/dial/DialVideoView.cpp

fseeko

int fseeko(FILE *, off_t, int)

头文件清单

#include "open_source/musl/include/stdio.h"

功能说明

  • 移动文件流的读写位置,偏移量类型为 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 ftello(FILE *)

头文件清单

#include "open_source/musl/include/stdio.h"

功能说明

  • 获取文件流的当前读写位置,返回值类型为 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

Macros

SEEK_SET

#define SEEK_SET 0

SEEK_CUR

#define SEEK_CUR 1

SEEK_END

#define SEEK_END 2