这些函数处理不同大小和格式的数据,从单个字符到大型数据结构都有。 它们还提供缓冲区,这样能提高性能。 流缓冲区的默认大小为 4K。 这些例程会仅影响由运行时库例程创建的缓冲区,对由操作系统创建的缓冲区不起作用。
流 I/O 例程
例程所返回的值
fprintf
,
_fprintf_l
,
fwprintf
,
_fwprintf_l
,
fprintf_s
,
_fprintf_s_l
,
fwprintf_s
,
_fwprintf_s_l
将格式化数据写入流
fputc
,
fputwc
将字符写入流(
putc
和
putwc
的函数版本)
_fputchar
,
_fputwchar
将字符写入
stdout
(
putchar
和
putwchar
的函数版本)
fputs
,
fputws
将字符串写入流
fread
从流中读取未格式化的数据
freopen
,
_wfreopen
,
freopen_s
,
_wfreopen_s
重新将
FILE
流指针分配到新的文件或设备
fscanf
,
fwscanf
,
fscanf_s
,
_fscanf_s_l
,
fwscanf_s
,
_fwscanf_s_l
从流中读取格式化数据
fseek
,
_fseeki64
将文件位置移动到给定位置
fsetpos
设置流的位置指示器
_fsopen
,
_wfsopen
打开具有文件共享的流
ftell
,
_ftelli64
获取当前文件位置
fwrite
将未格式化的数据项目写入流
getc
,
getwc
从流(
fgetc
和
fgetwc
的宏版本)读取字符
getchar
,
getwchar
从
stdin
(
fgetchar
和
fgetwchar
的宏版本)读取字符
_getmaxstdio
返回在 I/O 流级别允许同时打开的文件数。
gets_s
,
_getws_s
从
stdin
读取行
_getw
从流读取二进制
int
printf
,
_printf_l
,
wprintf
,
_wprintf_l
,
printf_s
,
_printf_s_l
,
wprintf_s
,
_wprintf_s_l
将格式化数据写入
stdout
putc
,
putwc
将字符写入流(
fputc
和
fputwc
的宏版本)
putchar
,
putwchar
将字符写入
stdout
(
fputchar
和
fputwchar
的宏版本)
puts
,
_putws
将行写入流
_putw
将二进制
int
写入流
rewind
将文件位置移动到的流的开头
_rmtmp
删除
tmpfile
创建的临时文件
scanf
,
_scanf_l
,
wscanf
,
_wscanf_l
,
scanf_s
,
_scanf_s_l
,
wscanf_s
,
_wscanf_s_l
从
stdin
读取格式化数据
setbuf
控制流缓冲
_setmaxstdio
设置在流 I/O 级别同时打开的最大文件数。
setvbuf
控制流缓冲和缓冲区大小
_snprintf
,
_snwprintf
,
_snprintf_s
,
_snprintf_s_l
,
_snwprintf_s
,
_snwprintf_s_l
将指定长度的格式化数据写入字符串
_snscanf
,
_snwscanf
,
_snscanf_s
,
_snscanf_s_l
,
_snwscanf_s
,
_snwscanf_s_l
从标准输入流读取指定长度的格式化数据。
sprintf
,
swprintf
,
sprintf_s
,
_sprintf_s_l
,
swprintf_s
,
_swprintf_s_l
将格式化数据写入字符串
sscanf
、
swscanf
、
sscanf_s
、_sscanf_s_l、
swscanf_s
、
_swscanf_s_l
从字符串读取格式化数据
_tempnam
,
_wtempnam
在给定目录中生成临时文件名
tmpfile
,
tmpfile_s
创建临时文件
tmpnam
,
_wtmpnam
,
tmpnam_s
,
_wtmpnam_s
生成临时文件名
ungetc
,
ungetwc
将字符推送回流上
_vcprintf
,
_vcwprintf
,
_vcprintf_s
,
_vcprintf_s_l
,
_vcwprintf_s
,
_vcwprintf_s_l
将格式化数据写入控制台。
vfprintf
,
vfwprintf
,
vfprintf_s
,
_vfprintf_s_l
,
vfwprintf_s
,
_vfwprintf_s_l
将格式化数据写入流
vprintf
,
vwprintf
,
vprintf_s
,
_vprintf_s_l
,
vwprintf_s
,
_vwprintf_s_l
将格式化数据写入
stdout
_vsnprintf
,
_vsnwprintf
,
vsnprintf_s
,
_vsnprintf_s
,
_vsnprintf_s_l
,
_vsnwprintf_s
,
_vsnwprintf_s_l
将指定长度的格式化数据写入缓冲区
vsprintf
,
vswprintf
,
vsprintf_s
,
_vsprintf_s_l
,
vswprintf_s
,
_vswprintf_s_l
将格式化数据写入缓冲区
当程序开始执行时,启动代码将自动开启若干流:标准输入(由
stdin
指向)、标准输出(由
stdout
指向)和标准错误(由
stderr
指向)。 默认情况下,这些流将定向到控制台(键盘和屏幕)。 使用
freopen
将
stdin
、
stdout
或
stderr
重定向到磁盘文件或设备。
默认情况下,会对使用流例程打开的文件执行缓冲操作。
stdout
每当函数已满时刷新,或者,如果在每次库调用后写入字符设备,则会刷新这些函数
stderr
。 如果某个程序异常终止,则可能不会刷新输出缓冲区,从而导致数据丢失。 使用
fflush
或
_flushall
确保与指定文件关联的缓冲区刷新到操作系统,或刷新所有打开的缓冲区。 操作系统可以在将数据写入磁盘之前缓存数据。 提交到磁盘功能可确保在系统发生故障时刷新的缓冲区内容不会丢失。
有两种方法将缓冲区内容提交到磁盘:
与文件 COMMODE.OBJ 链接以设置全局提交标志。 全局标志的默认设置是
n
,意味着“不提交”。
用
c
或
fopen
将模式标志设置为
_fdopen
。
专门使用
c
或
n
标志打开的任何文件的行为以该标志为准,而不考虑全局提交/不提交标志的状态。
如果程序未显式关闭流,则程序终止时会自动关闭流。 但是,你应在程序完成流操作时关闭流,因为可以同时打开的流的数量是有限。 有关此限制的详细信息,请参阅
_setmaxstdio
。
只有通过对
fflush
或对文件定位函数(
fseek
、
fsetpos
或
rewind
)进行干预调用时,输入才能直接跟随输出。 如果输入操作遇到文件末尾,则输入后跟输出,而无需对文件定位函数进行干预调用。
输入和输出
按类别分的通用 C 运行时例程