在线文档教程
C++
输入/输出 | Input/output

C-style file input/output

C型文件输入/输出

C++标准库的C/O子集实现了C风格的流输入/输出操作。大<cstdio>Header提供了通用文件操作支持,并为函数提供了窄字节和多字节字符输入/输出功能,<cwchar>报头提供了广泛的字符输入/输出功能。

c流是类型的对象。std::FILE只能通过类型的指针访问和操作。std::FILE*%28注:虽然可以创建一个本地类型的对象std::FILE通过取消引用和复制有效的std::FILE*,在I/O函数中使用此类副本的地址是未定义的行为%29。每个C流与外部物理设备%28文件、标准输入流、打印机、串口等相关。

C流可以用于未格式化和格式化的输入和输出。它们对区域设置敏感,并可根据需要执行宽/多字节转换。与C++流不同,在C++流中,每个流都与自己的区域设置相关联,所有C流都访问相同的locale对象:最近安装的std::setlocale...

此外,访问设备%28所需的系统特定信息。POSIX文件描述符%29,每个C流对象包含以下内容:

1%29字符宽度:未设置,窄或宽

2%29缓冲状态:未缓冲,行缓冲,完全缓冲.

3%29缓冲器,可由用户提供的外部缓冲器代替.

4%29 I/O模式:输入、输出或更新%28同时输入和输出%29。

5%29二进制/文本模式指示器。

6%29文件结束状态指示器.

7%29错误状态指示器。

8%29文件位置指示器%28 a类型的对象std::fpos_t%29,对于宽字符流,它包含类型为std::mbstate_t29%。

9%29%28 C++17%29可重入锁,用于防止多线程读取、写入、定位或查询流位置时的数据竞争。

窄宽取向

新打开的溪流没有方向。第一次呼叫std::fwide或对任意I/O函数建立定向:宽I/O函数使流宽定向,窄I/O函数使流窄定向。一旦设置好,方向只能用std::freopen窄I/O函数不能在面向宽流上调用,宽I/O函数不能在面向窄流上调用。宽I/O函数在宽字符和多字节字符之间转换,就像通过调用std::mbrtowcstd::wcrtomb与程序中有效的多字节字符串不同,文件中的多字节字符可能包含嵌入的空值,并且不必在初始移位状态下开始或结束。

POSIX要求[医]当前安装的C语言环境的Ctype facet在其定向变得宽的时候就存储在它的流对象中,并且用于该流上的所有未来I/O,直到方向被更改,而不管随后调用到std::setlocale...

二进制和文本模式

文本流是一个有序的字符序列,由一行%280个或更多个字符加上终止字符组成。'\n'29%。最后一行是否需要终止'\n'是实现定义的。输入和输出中可能必须添加、修改或删除字符,以符合在OS%28中表示文本的约定--特别是Windows OS上的C流转换\n\r\n关于输出和转换\r\n\n输入%29。

从文本流中读取的数据只有在以下所有内容都为真的情况下,才能与先前写入该流的数据进行比较:

  • 数据只包含打印字符和控制字符。\t\n%28,特别是在Windows操作系统上,字符'\0x1A'终止输入%29

  • NO\n前面紧跟空格字符%28,在读取%29时,这些空格字符可能会消失。

  • 最后一个字符是\n

二进制流是一个有序的字符序列,可以透明地记录内部数据。从二进制流中读取的数据总是等于先前写入该流的数据。实现只允许将许多空字符追加到流的末尾。宽二进制流不需要以初始移位状态结束。

POSIX实现不区分文本流和二进制流%28,没有针对\n或任何其他字符%29的特殊映射。

功能

在标头中定义<cstdio>

*。

文件存取

打开文件%28函数%29

用不同的名称%28函数%29打开现有流

关闭文件%28功能%29

Ffflush将输出流与实际文件%28功能%29同步。

fwide在宽字符I/O和窄字符I/O%28功能%29之间切换文件流。

设置文件流%28功能%29的缓冲区

setvbuf为文件流%28函数%29设置缓冲区及其大小

直接输入/输出

读取文件%28功能%29

写入文件%28函数%29

未格式化输入/输出

字节/多字节字符

fgetcgetc从文件流%28函数%29中获取一个字符

fget从文件流%28函数%29中获取字符串

fputcputc将字符写入文件流%28函数%29

fput将字符串写入文件流%28函数%29

getchar从stdin%28函数%29读取字符

获取%28,直到C++14%29从stdin%28函数%29读取字符串

putchar将字符写入stdout%28函数%29

将字符串写入到stdout%28函数%29

卸载将一个字符放回文件流%28函数%29中

宽特性

fgetwcgetwc从文件流%28函数%29获得宽字符

fgetws从文件流%28函数%29获得宽字符串。

fputwcputwc将宽字符写入文件流%28函数%29

fputws将宽字符串写入文件流%28函数%29

getwchar从stdin%28函数%29读取宽字符

putwchar编写一个宽字符到stdout%28函数%29

ungetwc将一个宽字符返回到文件流%28函数%29中。

格式化输入/输出

字节/多字节字符

扫描扫描程序从stdin、文件流或缓冲区%28功能%29读取格式化输入。

使用变量列表%28C+11%29%28C+11%29%28C+11%29从stdin、文件流或缓冲区读取格式化输入

printffprintfsprintfsnprintf%28C++11%29打印格式化输出到stdout、文件流或缓冲区%28功能%29

vprintfvprintfsprintfvsnprintf%28C++11%29输出格式化输出到stdout、文件流或使用变量参数列表%28函数%29的缓冲区

宽特性

从stdin、文件流或缓冲区%28函数%29读取格式化的宽字符输入。

vwcanfvfwscencfswsnf%28C++11%29%28C++11%29%28C+11%29从stdin、文件流或缓冲区中读取格式化宽字符输入,使用变量参数列表%28 Function%29

wprintffwprintfswprintf打印格式化的宽字符输出到stdout、文件流或缓冲区%28功能%29

vwprintffwprintfvswprintf输出格式化的宽字符输出到stdout、文件流或使用变量参数列表%28 FunctionList%29的缓冲区

文件定位

返回当前文件位置指示符%28功能%29

fgetpos获得文件位置指示符%28功能%29

将文件位置指示符移动到文件%28功能%29中的特定位置。

Fsetpos将文件位置指示符移动到文件%28功能%29中的特定位置。

将文件位置指示符移到文件%28函数%29中的开头

错误处理

清除错误%28功能%29

对文件末尾的检查%28功能%29

错误检查文件错误%28功能%29

Perror将当前错误对应的字符串显示为stderr%28函数%29

文件操作

删除文件%28功能%29

重命名文件%28函数%29

tmpfile创建并打开一个临时的自动删除文件%28功能%29。

tmpnam返回唯一的文件名%28函数%29

类型

在标头中定义<cstdio>

*。

类型定义

文件对象类型,能够保存控制C/O流所需的所有信息

FPO[医]t完成非数组对象类型,能够唯一地指定文件中的位置,包括其多字节解析状态。

大小[医]t无符号整数类型,由大号运算符%28tydurif%29返回

在标头中定义<cstdio>

*。

类型文件的stdinstdoutstderr表达式%2A与类型文件的输入流表达式关联。%2A与类型文件的输出流表达式关联。%2A与错误输出流%28宏常量%29相关联

整数型整数表达式和负值%28宏常数%29

FOPEN[医]可以同时打开的最大文件数%28宏常量%29

文件名[医]保存最长支持的文件名%28宏常量%29的char数组所需的最大大小

STD::setbuf%28宏常量%29所用缓冲区的BUFSIZ大小

[医]IOFBF[医]IOLBF[医]IONBF参数为std::setbuf,指示完全缓冲的I/O参数到std::setbuf,指示行缓冲的I/OIBUF到STD::setbuf,指示未缓冲的I/O%28宏常量%29

寻觅[医]SETSEEK[医]库尔塞克[医]从文件开始到std::ffind指示查找,从当前的文件位置参数到std::ffind指示从文件的末尾查找文件%28宏常量%29

TMP[医]最大最大的唯一文件名数,可由std::tmpnam%28宏常量%29生成

L[医]存储std::tmpnam%28宏常量%29的字符数组所需的tmpnam大小

另见

C文件输入/输出文档

*。

© cppreference.com

在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。

http://en.cppreference.com/w/cpp/io/c