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_t
29%。
9%29%28 C++17%29可重入锁,用于防止多线程读取、写入、定位或查询流位置时的数据竞争。
窄宽取向
新打开的溪流没有方向。第一次呼叫std::fwide
或对任意I/O函数建立定向:宽I/O函数使流宽定向,窄I/O函数使流窄定向。一旦设置好,方向只能用std::freopen
窄I/O函数不能在面向宽流上调用,宽I/O函数不能在面向窄流上调用。宽I/O函数在宽字符和多字节字符之间转换,就像通过调用std::mbrtowc
和std::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。