序言
本手册页是POSIX程序员手册的一部分。这些接口的Linux实现可能不同(有关Linux
行为的详细信息,请参阅相应的Linux手册页),或者接口可能未在Linux上实现。
名称
stdio.h — 标准缓冲输入/输出
概要
#include <stdio.h>
说明
此参考页面中描述的某些功能扩展了ISO C标准。应用程序应定义适当的功能测试
宏(参考POSIX.1-2008的系统接口卷,第2.2节,编译环境)来使能在本头文件中
符号的可见性。
<stdio.h>头文件使用typedef定义了以下的数据类型:
FILE 包含文件信息的结构体。
fpos_t 一个非数组类型,包含了所有的用于唯一指定文件位置的信息。
off_t 在<sys/types.h>中描述。
size_t 在<stddef.h>中描述。
ssize_t 在<sys/types.h>中描述。
va_list 在<stdarg.h>中描述。
<stdio.h>头文件定义了以下宏,这些宏会被扩展为整型常量表达式:
BUFSIZ <stdio.h>缓冲区的大小,被扩展为正值。
L_ctermid 保存ctermid()输出的字符数组的最大大小。
L_tmpnam 保存tmpnam()输出的字符数组的最大大小。
<stdio.h>头文件定义了以下宏,这些宏会被扩展为具有不同值的整型常量表达式:
_IOFBF 输入/输出全缓冲。
_IOLBF 输入/输出行缓冲。
_IONBF 输入/输出无缓冲。
<stdio.h>头文件定义了以下宏,这些宏会被扩展为具有不同值的整型常量表达式:
SEEK_CUR 相对于当前位置。
SEEK_END 相对于文件尾部。
SEEK_SET 相对于文件开头。
<stdio.h>头文件定义以下宏,这些宏会被扩展为表示限度的整型常量表达式:
{FILENAME_MAX}
由具体实现保证可以打开的最长路径名的长度,以字节为单位。
{FOPEN_MAX}
由具体实现保证可以同时打开的文件流数。该值至少为8。
{TMP_MAX}
tmpnam()可生成的唯一文件名的最小数量。应用程序可以可靠地调用
tmpnam()的最大次数。该值至少为25。在XSI兼容的系统上,{TMP_MAX}
的值至少为10000。
<stdio.h>头文件定义以下宏,该宏会被扩展为具有int类型的负值的整型常量表达
式:
EOF 文件结束返回值。
<stdio.h>头文件会定义NULL,如<stddef.h>中所述。
<stdio.h>头文件定义以下宏,该宏会被扩展为字符串常量:
P_tmpdir tempnam()使用的默认路径前缀。
<stdio.h>头文件定义以下宏,这些宏会被扩展为指向FILE类型对象的指针,分别对
应标准错误流,标准输入流和标准输出流:
stderr 标准错误输出流。
stdin 标准输入流。
stdout 标准输出流。
以下可能声明为函数,也可能定义为宏。应提供函数原型。
void clearerr(FILE *);
char *ctermid(char *);
int dprintf(int, const char *restrict, ...);
int fclose(FILE *);
FILE *fdopen(int, const char *);
int feof(FILE *);
int ferror(FILE *);
int fflush(FILE *);
int fgetc(FILE *);
int fgetpos(FILE *restrict, fpos_t *restrict);
char *fgets(char *restrict, int, FILE *restrict);
int fileno(FILE *);
void flockfile(FILE *);
FILE *fmemopen(void *restrict, size_t, const char *restrict);
FILE *fopen(const char *restrict, const char *restrict);
int fprintf(FILE *restrict, const char *restrict, ...);
int fputc(int, FILE *);
int fputs(const char *restrict, FILE *restrict);
size_t fread(void *restrict, size_t, size_t, FILE *restrict);
FILE *freopen(const char *restrict, const char *restrict,
FILE *restrict);
int fscanf(FILE *restrict, const char *restrict, ...);
int fseek(FILE *, long, int);
int fseeko(FILE *, off_t, int);
int fsetpos(FILE *, const fpos_t *);
long ftell(FILE *);
off_t ftello(FILE *);
int ftrylockfile(FILE *);
void funlockfile(FILE *);
size_t fwrite(const void *restrict, size_t, size_t, FILE *restrict);
int getc(FILE *);
int getchar(void);
int getc_unlocked(FILE *);
int getchar_unlocked(void);
ssize_t getdelim(char **restrict, size_t *restrict, int,
FILE *restrict);
ssize_t getline(char **restrict, size_t *restrict, FILE *restrict);
char *gets(char *);
FILE *open_memstream(char **, size_t *);
int pclose(FILE *);
void perror(const char *);
FILE *popen(const char *, const char *);
int printf(const char *restrict, ...);
int putc(int, FILE *);
int putchar(int);
int putc_unlocked(int, FILE *);
int putchar_unlocked(int);
int puts(const char *);
int remove(const char *);
int rename(const char *, const char *);
int renameat(int, const char *, int, const char *);
void rewind(FILE *);
int scanf(const char *restrict, ...);
void setbuf(FILE *restrict, char *restrict);
int setvbuf(FILE *restrict, char *restrict, int, size_t);
int snprintf(char *restrict, size_t, const char *restrict, ...);
int sprintf(char *restrict, const char *restrict, ...);
int sscanf(const char *restrict, const char *restrict, ...);
char *tempnam(const char *, const char *);
FILE *tmpfile(void);
char *tmpnam(char *);
int ungetc(int, FILE *);
int vdprintf(int, const char *restrict, va_list);
int vfprintf(FILE *restrict, const char *restrict, va_list);
int vfscanf(FILE *restrict, const char *restrict, va_list);
int vprintf(const char *restrict, va_list);
int vscanf(const char *restrict, va_list);
int vsnprintf(char *restrict, size_t, const char *restrict,
va_list);
int vsprintf(char *restrict, const char *restrict, va_list);
int vsscanf(const char *restrict, const char *restrict, va_list);
包含<stdio.h>头文件也可以使得<stddef.h>中的所有符号可见。
以下部分是信息描述。
应用使用方法
由于标准I/O流可能使用底层文件描述符来访问与流关联的文件,因此应用程序开
发人员需要注意,如果文件描述符用于访问与流无关的文件,则{FOPEN_MAX}可能
不可用。
基本原理
ISO C和POSIX之间针对{TMP_MAX}的定义存在冲突,该问题由ISO/IEC 9899:1999
标准,缺陷报告336解决。POSIX与对缺陷报告的应对措施的公共记录保持一致,
但此应对措施尚未作为 ISO C的一部分发布。
未来发展方向
无。
推荐阅读
<stdarg.h>, <stddef.h>, <sys_types.h>
POSIX.1-2008的系统接口卷,第2.2节,编译环境,clearerr,ctermid,fclose,fdopen,
feof,ferror,fflush,fgetc,fgetpos,fgets,fileno,flockfile,fmemopen,fopen,
fprintf,fputc,fputs,fread,freopen,fscanf,fseek,fsetpos,ftell,fwrite,getc,
getchar,getc_unlocked,getdelim,getopt,gets,open_memstream,pclose,perror,
popen,putc,putchar,puts,remove,rename,rewind,setbuf,setvbuf,stdin,
system,tempnam,tmpfile,tmpnam,ungetc,vfprintf,vfscanf
版权
本文部分内容从IEEE 1003.1,2013版,信息技术标准 -- 便携式操作系统接口
(POSIX)、开放组基本规范第7期以电子形式重印和复制,版权(C) 2013由电气和电
子工程师协会和开放组所有。(这是POSIX.1-2008,应用了2013年技术勘误表1。)
如果此版本与原始IEEE和The Open Group标准之间存在任何差异,则以原始IEEE
和The Open Group标准为准。原始标准可以在http://www.unix.org/online.html在
线获得。
此页面中出现的任何印刷或格式错误很可能是在将源文件转换为手册页格式的过
程中引入的。要报告此类错误,请参阅
https://www.kernel.org/doc/man-pages/reporting_bugs.html。
IEEE/The Open Group 2013 stdio.h(7POSIX)