# 标准库头文件 <cstdio>

< cpp‎ | header

此头文件原作为 `<stdio.h>` 存在于 C 标准库。

此头文件是 C 风格输入/输出库的一部分。

### 类型
FILE | 对象类型，足以保有控制 C I/O 流所需的全部信息 (typedef)
fpos_t | 完整非数组对象类型，足以唯一指定文件中的位置，包含其多字节剖析状态 (typedef)
size_t | `sizeof` 运算符返回的无符号整数类型 (typedef)
### 宏
NULL | 实现定义的空指针常量 (宏常量)
stdin stdout stderr | 与输入流关联到 FILE* 类型表达式 与输出流关联的 FILE* 类型表达式 与错误输出流关联的 FILE* 类型表达式 (宏常量)
EOF | 拥有 int 类型和负值的整数常量表达式 (宏常量)
FOPEN_MAX | 能同时打开的文件数 (宏常量)
FILENAME_MAX | 要保有最长受支持文件名的 char 数组所需的长度 (宏常量)
BUFSIZ | std::setbuf 所用的缓冲区大小 (宏常量)
_IOFBF_IOLBF_IONBF | 给 std::setbuf 的参数，指示全缓冲 I/O 给 std::setbuf 的参数，指示行缓冲 I/O 给 std::setbuf 的参数，指示无缓冲 I/O (宏常量)
SEEK_SET SEEK_CUR SEEK_END | 给 std::fseek 的参数，指示从文件起始寻位 给 std::fseek 的参数，指示从当前文件位置寻位 给 std::fseek 的参数，指示从文件尾寻位 (宏常量)
TMP_MAX | std::tmpnam 所能生成的唯一文件名的最大数量 (宏常量)
L_tmpnam | 保有 std::tmpnam 结果的 char 数组所需的大小 (宏常量)
### 函数
##### 文件访问
fopen | 打开文件 (函数)
freopen | 以不同名称打开既存流 (函数)
fclose | 关闭文件 (函数)
fflush | 将输出流与实际文件同步 (函数)
setbuf | 为文件流设置缓冲区 (函数)
setvbuf | 为文件流设置缓冲区与其大小 (函数)
##### 直接输入/输出
fread | 从文件读取 (函数)
fwrite | 写入文件 (函数)
##### 无格式输入/输出
##### 窄字符
fgetc getc | 从文件流获取字符 (函数)
fgets | 从文件流获取字符串 (函数)
fputc putc | 写字符到文件流 (函数)
fputs | 写字符串到文件流 (函数)
getchar | 从 stdin 读取字符 (函数)
gets (C++11 中弃用)(C++14 中移除) | 从 stdin 读取字符串 (函数)
putchar | 写字符到 stdout (函数)
puts | 写字符串到 stdout (函数)
ungetc | 把字符放回文件流 (函数)
##### 有格式输入/输出
##### 窄/多字节字符
scanf fscanf sscanf | 从 stdin、文件流或缓冲区读取有格式输入 (函数)
vscanf vfscanf vsscanf (C++11)(C++11)(C++11) | 使用可变实参列表 从 stdin、文件流或缓冲区读取有格式输入 (函数)
printf fprintf sprintf snprintf (C++11) | 打印有格式输出到 stdout、文件流或缓冲区 (函数)
vprintf vfprintf vsprintf vsnprintf (C++11) | 使用可变实参列表 打印有格式输出到 stdout、文件流或缓冲区 (函数)
##### 文件寻位
ftell | 返回当前文件位置指示器 (函数)
fgetpos | 获取文件位置指示器 (函数)
fseek | 移动文件位置指示器到文件中的指定位置 (函数)
fsetpos | 移动文件位置指示器到文件中的指定位置 (函数)
rewind | 移动文件位置指示器到文件起始 (函数)
##### 错误处理
clearerr | 清除错误 (函数)
feof | 检查文件尾 (函数)
ferror | 检查文件错误 (函数)
perror | 显示对应当前错误的字符串于 stderr (函数)
##### 文件上的操作
remove | 删除文件 (函数)
rename | 重命名文件 (函数)
tmpfile | 创建并打开一个临时、自动移除的文件 (函数)
tmpnam | 返回一个唯一独有的文件名 (函数)

### 概要

    namespace std {
      using size_t = /* 见描述 */;
      using FILE = /* 见描述 */;
      using fpos_t = /* 见描述 */;
    }

    #define NULL /* 见描述 */
    #define _IOFBF /* 见描述 */
    #define _IOLBF /* 见描述 */
    #define _IONBF /* 见描述 */
    #define BUFSIZ /* 见描述 */
    #define EOF /* 见描述 */
    #define FOPEN_MAX /* 见描述 */
    #define FILENAME_MAX /* 见描述 */
    #define L_tmpnam /* 见描述 */
    #define SEEK_CUR /* 见描述 */
    #define SEEK_END /* 见描述 */
    #define SEEK_SET /* 见描述 */
    #define TMP_MAX /* 见描述 */
    #define stderr /* 见描述 */
    #define stdin /* 见描述 */
    #define stdout /* 见描述 */

    namespace std {
      int remove(const char* filename);
      int rename(const char* old_p, const char* new_p);
      FILE* tmpfile();
      char* tmpnam(char* s);
      int fclose(FILE* stream);
      int fflush(FILE* stream);
      FILE* fopen(const char* filename, const char* mode);
      FILE* freopen(const char* filename, const char* mode, FILE* stream);
      void setbuf(FILE* stream, char* buf);
      int setvbuf(FILE* stream, char* buf, int mode, size_t size);
      int fprintf(FILE* stream, const char* format, ...);
      int fscanf(FILE* stream, const char* format, ...);
      int printf(const char* format, ...);
      int scanf(const char* format, ...);
      int snprintf(char* s, size_t n, const char* format, ...);
      int sprintf(char* s, const char* format, ...);
      int sscanf(const char* s, const char* format, ...);
      int vfprintf(FILE* stream, const char* format, va_list arg);
      int vfscanf(FILE* stream, const char* format, va_list arg);
      int vprintf(const char* format, va_list arg);
      int vscanf(const char* format, va_list arg);
      int vsnprintf(char* s, size_t n, const char* format, va_list arg);
      int vsprintf(char* s, const char* format, va_list arg);
      int vsscanf(const char* s, const char* format, va_list arg);
      int fgetc(FILE* stream);
      char* fgets(char* s, int n, FILE* stream);
      int fputc(int c, FILE* stream);
      int fputs(const char* s, FILE* stream);
      int getc(FILE* stream);
      int getchar();
      int putc(int c, FILE* stream);
      int putchar(int c);
      int puts(const char* s);
      int ungetc(int c, FILE* stream);
      size_t fread(void* ptr, size_t size, size_t nmemb, FILE* stream);
      size_t fwrite(const void* ptr, size_t size, size_t nmemb, FILE* stream);
      int fgetpos(FILE* stream, fpos_t* pos);
      int fseek(FILE* stream, long int offset, int whence);
      int fsetpos(FILE* stream, const fpos_t* pos);
      long int ftell(FILE* stream);
      void rewind(FILE* stream);
      void clearerr(FILE* stream);
      int feof(FILE* stream);
      int ferror(FILE* stream);
      void perror(const char* s);
    }

### 注解

- NULL 亦定义于下列头文件：
  - `<clocale>`
  - `<ctime>`
  - `<cstddef>`
  - `<cstring>`
  - `<cwchar>`
  - `<cstdlib>`
- std::size_t 亦定义于下列头文件：
  - `<ctime>`
  - `<cstddef>`
  - `<cstring>`
  - `<cwchar>`
  - `<cuchar>` (C++17 起)
  - `<cstdlib>`