相关文章推荐
有情有义的香烟  ·  【ARXIV2207】HorNet: ...·  1 年前    · 
时尚的海豚  ·  layer.js错误Uncaught ...·  1 年前    · 

这些函数处理不同大小和格式的数据,从单个字符到大型数据结构都有。 它们还提供缓冲区,这样能提高性能。 流缓冲区的默认大小为 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 运行时例程

  •