stdioh头文件.docx
《stdioh头文件.docx》由会员分享,可在线阅读,更多相关《stdioh头文件.docx(17页珍藏版)》请在冰豆网上搜索。
stdioh头文件
stdio.h
本文所总结的内容是我学习头文件cstdio与stdio.h并查阅书籍和网络所得。
stdio.h,应该是跟我差不多学习经历(C-->C++-->?
)的人所接触到的第一个头文件,说它是最熟悉用得最多的头文件之一应该一点也不为过。
可是,对它,我除了经常用到的printf与scanf,又知之几何呢?
这里循cstdio头文件(i386-pc-mingw32gcc4.5.0版)里using的顺序来记录。
_GLIBCXX_BEGIN_NAMESPACE(std)
using:
:
FILE;
using:
:
fpos_t;
using:
:
clearerr;
using:
:
fclose;
using:
:
feof;
using:
:
ferror;
using:
:
fflush;
using:
:
fgetc;
using:
:
fgetpos;
using:
:
fgets;
using:
:
fopen;
using:
:
fprintf;
using:
:
fputc;
using:
:
fputs;
using:
:
fread;
using:
:
freopen;
using:
:
fscanf;
using:
:
fseek;
using:
:
fsetpos;
using:
:
ftell;
using:
:
fwrite;
using:
:
getc;
using:
:
getchar;
using:
:
gets;
using:
:
perror;
using:
:
printf;
using:
:
putc;
using:
:
putchar;
using:
:
puts;
using:
:
remove;
using:
:
rename;
using:
:
rewind;
using:
:
scanf;
using:
:
setbuf;
using:
:
setvbuf;
using:
:
sprintf;
using:
:
sscanf;
using:
:
tmpfile;
using:
:
tmpnam;
using:
:
ungetc;
using:
:
vfprintf;
using:
:
vprintf;
using:
:
vsprintf;
_GLIBCXX_END_NAMESPACE
宏常量:
EOF,FILENAME_MAX,TMP_MAX
内置对象:
stderr,stdin,stdout
FILE
在stdio.h头文件中定义的结构。
一般来说,它用于对文件进行操作的函数的参数或者返回值等等。
它在头文件中的定义如下(成员后面的注释援引自XX知道,准确与否我查找资料未果,到后来专门找个时间将FILE结构体解读一下):
typedefstruct_iobuf
{
char* _ptr; //文件输入的下一个位置
int _cnt; //当前缓冲区的相对位置
char* _base; //指基础位置(即是文件的起始位置)
int _flag; //文件状态标志
int _file; //文件的有效性验证
int _charbuf; //检查缓冲区状况,如果无缓冲区则不读取
int _bufsiz; //缓冲区大小
char* _tmpfname; //临时文件名
}FILE;
fpos_t
一种类型,包含的指定在一个文件中的位置的信息(Objectcontaininginformationtospecifyapositionwithinafile)。
是一种基本类型的别名,在MSVCRT下为longlong,其它环境下为long。
可见其定义:
#ifdef__MSVCRT__
typedeflonglongfpos_t;
#else
typedeflong fpos_t;
#endif
clearerr
功能:
重置流的error与EOF指示器。
当一个使用流的功能因为error或者EOF而失败时,一个或多个内部指示器会被设置,这些指示器会一直有效直到调用clearerr、rewind、fseek或fsetpos为止。
比如说当使用fopen打开一个文件而只给"r"权限,当试图对它进行"w"操作时就会产生错误,这时需要使用本函数来重置指示器信息。
用法:
clearerr(FILE*pFile),返回void。
fclose
功能:
关闭与流关联的文件并取消关联。
与这个流相关联的所有内部缓冲区将被刷新;缓冲区中还没有写入的内容及没有读的内容都将被丢弃。
即使函数调用失败,这个流将与文件失去了关联。
用法:
fclose(FILE*pFile),返回int值,如果函数执行成功,将返回0,否则返回EOF。
feof
功能:
检查与文件相关联的流的EOF指示器的状态。
用法:
feof(FILE*pFile),返回int值,如果EOF置位,返回非零值,否则返回零值。
ferror
功能:
检查与文件相关联的流的error指示器的状态,通常该指示器是因为对已经产生错误的流的过早操作。
用法:
ferror(FILE*pFile),返回int值,如果error指示器置位,返回非零值,否则返回零值。
fflush
功能:
刷新流。
如果给定的流打开是为了写操作并且上一个I/O操作是输出,在输出缓冲区中的任何不成文的数据将被写到文件。
如果给定的流打开是为了读操作并且上一个操作是输入操作,行为取决于具体的库实现。
在某些实现中这次导致输入缓冲区被清除,但是这不是标准的行为。
如果参数是一个空指针,所有打开的文件将被刷新。
流在这个调用之后将保持打开。
如果一个文件因为对fclose的调用或者程序终止而关闭,所有与其有关的缓冲区都将被自动刷新。
用法:
fflush(FILE*pFile),返回int型值,零值表示成功,若发生错误将返回EOF且错误指示器将被设置。
fgetc
功能:
从流中获取字符。
返回指定流的内部文件位置指示器当前指向的字符。
内部文件位置指示器向前移动一个字符指向下一个字符。
用法:
fgetc(FILE*pFile),返回int型值,正常情况下返回该字符的ASCII值,如果出错或者到达EOF,则返回EOF并且设置error和EOF指示器。
fgetpos
功能:
获取在流中的当前位置。
获取唯一指定的流中位置指示器并且将其保存到指向位置的fpos_t类型变量。
用法:
fgetpos(FILE*pFile,fpos_t*pos),正常时返回零值,出错时返回非零int值。
fgets
功能:
从流中读取多个字符并且将它们以C风格字符串存储到char*类型参数直到指定字符-1个字符已经读取或者一个换行或者到达EOF为止。
换行符会让fgets停止读取,但是它会被当作有效字符它会被包含到目标字符串里面去。
C风格字符串默认会将一个空字符添加到获取的字符串后面。
用法:
fgets(char*str,intnum,FILE*pFile),str将存储目标字符串,num指示读取字符数+1。
返回值为char*类型。
如果正常读取,将返回str,如果没有字符被读取并且到达EOF,str的值将不变且返回空指针。
如果有错误发生,会返回空指针。
fopen
功能:
以指定的模式打开指定名字的文件,将其与一个可以对文件进行操作的流进行关联并返回FILE*。
打开模式决定了流能对文件进行哪些操作。
用法:
fopen(constchar*filename,constchar*mode),返回FILE*。
文件名为C风格字符串,而mode可以为"r","w","a","+","b"几种模式的组合,常见的组合如下:
"r"-->打开文件,并读取文件内容,若文件不存在,将会发生错误。
"w"-->打开文件,并清除其内容,重新准备写入数据,若文件不存在,则建立新文件。
"a"-->若文件已存在,则新写入的数据直接从文件末端接入。
"r+"-->打开文件,可提供读/写,若文件不存在,则发生错误。
"w+"-->打开文件,可提供读/写,若文件已存在,则清除其内容。
"a+"-->打开文件,可提供读/写,但写入数据仅能接在源文件之后。
"rb"-->打开二进制文件,并读取文件内容,若文件不存在将发生错误。
"wb"-->打开二进制文件,并清除其内容,重新准备写入数据,若文件不存在,则建立新文件。
"ab"-->打开二进制文件,若文件已存在,则新写入的数据直接从文件末端接入。
"r+b"-->打开二进制文件,可提供读/写,若文件不存在,则发生错误。
"w+b"-->打开二进制文件,可提供读/写,若文件已存在,则清除其内容。
"a+b"-->打开二进制文件,可提供读/写,但写入数据仅能接在源文件之后。
fprintf
功能:
将格式化过的输出写到流。
将数据序列以格式参数指定的格式化之后见到指定流。
在格式参数之后函数还需要至少在格式参数里指定的那么多个参数。
用法:
fprint(FILE*pFile,constchar*format,...)。
如果成功,写入字符总数将被作为int型返回,否则将返回负值。
其中format参数中指定附加参数时格式为:
%[flags][width][.precision][length]specifier
其中specifier是最重要的一个,它定义参数类型和说明,可能的值为:
"c"-->字符。
"dORi"-->带符号十进制整数。
"e"-->用e表示的科学计数法。
"E"用E表示的科学计数法,"f"-->十进制浮点数。
"g"-->usetheshorterof%Eor%f。
"G"-->usetheshorterof%Eor%f。
"o"-->八进制,"s"-->字符串。
"u"-->无符号十进制整数。
"x"-->无符号十六进制整数。
"X"-->无符号十六进制整数(使用大写字母)。
"p"-->指针地址。
"n"-->无输出,该参数必须是一个带符号整型。
"%"-->%%表示转义,将输出%。
flags的可能值:
"-"-->以给定字符宽度对齐。
"+"-->在结果前面都加上(+或-),默认情况下,只有负数才加上"-"。
(space)-->如果没有符号将被打印,则一个空格将被插入到值之前。
"#"-->与o,x或X一起使用时指定非零值以0,0x或0X开始;与e,E和f一起使用时,将强制输出一个小数点即使后面没有数字;与g或G一起使用时与和e,E一样但是最后的零将不会被去掉。
"0"-->左边用0而不是空格填充。
width的可能值:
(number)-->最小打印的数字个数,若值的位数不够则用空格填充,若值超过也不会被截断。
"*"-->宽度不指定,但在成为附加整形参数之前参数必须已经被格式化过。
.precision的可能值:
.number-->对d,i,o,u,x,X来说,precision指定需要被写的最少数字个数。
如果值比它短,值将在前面用0填充,值过大将不会被截断,number为0表示当值为0时将没胡输出;对e,E和f来说,number指定小数点后位数;对g,G来说,将会是最大有效数字;对s来说,将会是输出的最大字符数;对c来说这没有影响。
如果没有precision被指定,缺省为1。
.*-->精度在格式化字符串中未指定,附加整型参数之前必须已经被格式化过。
length的可能值:
"h"-->参数被转换为shortint或unsignedshortint,只适用于i,d,o,u,x和X。
"l"-->参数被转换为longint或unsignedlongint当与i,d,o,u,x,X一起使用时,宽字符或宽字符串当与c,s一起使用时。
"L"-->参数被转换为longdouble当与e,E,f,g,G一起时。
fputc
功能:
写一个字符到指定流,并且位置指示器前进一个。
字符将被写到流的内部位置指示器指示的当前位置,指示器随后前进一个字符。
用法:
fputc(intch,FILE*pFile),成功则返回该字符,否则返回EOF并设置error指示器。
fputs
功能:
写一个字符串到指定流。
C风格字符串最后的'\0'将不会被写到流。
用法:
fputs(constchar*str,FILE*pFile),返回值为int型,若出错则返回EOF,否则返回无效字符。
fread
功能:
从流中读取数据块。
读取指定个数元素的一组数据,其中每个元素有指定字节数,从流中读取并存放在指定内存块。
用法:
size_tfread(void*ptr,size_tsize,size_tcount,FILE*pFile),ptr指向一个至少有size*count大小的内存块,size指示每一个元素的大小,count指示读取元素个数。
函数将返回读取的元素总数,如果它与count不符,那么可能是发生了错误或者是到达了EOF。
freopen
功能:
函数将尝试关闭与第三个参数所代表的流所关联的文件并取消关联,然后不管流此时的状态是否为关闭,将打开流并打开指定文件且与其相关联。
此函数在将指定文件关联到stdin,stdout,stderr等流时格式有用。
用法:
FILE*freopen(constchar*filename,constchar*mode,FILE*stream),mode相关信息详见fopen函数说明。
成功则返回确定流的对象,否则返回空指针。
fscanf
功能:
从流中读取格式化数据。
从流中读取数据并存储在附加参数指向的位置。
附加参数必须指向在格式参数中指定类型的已经分配的对象。
用法:
intfscanf(FILE*pFile,constchar*format,...),format中可能包含以下元素:
1.空白字符。
函数会读取并忽略所有空白字符包括空格、换行和制表符直到读到下一个非空字符。
可以包含任意数目的空白字符。
2.除%外的任意非空字符。
任意一个不是空白字符且不是以%开头的字符将导致函数从流中读取下一个字符将其与它比较,如果匹配则函数将进行下一个字符的读取与比较。
如果不匹配,函数失败并返回,结束读取。
3.格式指定符。
由以%开始的序列形成一个格式说明符,用于指定从流中提取到的数据的类型和格式并将其存储在附加参数中指出的位置。
格式说明符的原型如下:
[=%[*][width][modifiers]type=]
其中:
*-->一个可选的起始符号,指示将从流中读取的数据被忽略。
width-->在当前读操作中读取的最大字符数。
modifiers-->指定不同于int(在d,i,n情况下),unsignedint(在o,u,x情况下),float(在e,f,g情况下)的附加参数指定的数据的大小。
"h"-->shortint(在d,i,n),或unsignedshortint(在o,u,x)。
"l"-->longint(在d,i,n),或unsignedlongint(在o,u,x)或double(在e,f,g)。
"L"-->longdouble(在e,f,g)。
type-->一个指定要读取数据的类型与期望的读取方式,它可能的值如下:
c-->单个字符。
d-->十进制整数。
可选正负号。
e,E,f,g,G-->浮点数。
可选正负号,可以使用科学计数法。
o-->八进制整数。
s-->字符串。
读取字符串直到空白字符出现。
u-->无符号十进制整数。
x,X-->十六进制整数。
附加参数期望是引用(指针)类型,如果你想将fscanf读取来的数据存储到一个一般变量,则需要加&符号。
如:
fscanf(pFile,"%d",&n);
函数时返回成功读取的元素个数。
这个计数比期望的读取数少或者相等,在匹配失败的情况下甚至是0。
在没有数据被成功读取时失败则返回EOF。
fseek
功能:
重新定位流的位置指示器。
将与流关联的位置指示器设置到一个新的由第三个参数指定的引用位置加上第二个参数指定的偏移量而定义的新的位置。
在调用了此函数之后EOF指示器将被清除,ungetc函数所产生的所有影响将被丢弃。
当在文本文件使用fseek和ftell时,记住在一些平台上对文本文件进行格式转换时将导致意想不到的重定位。
在开放的可以读写的流上,对fseek的调用可以对读和写之间进行切换。
用法:
intfseek(FILE*pFile,longintoffset,intorigin),offset指示相对origin的偏移量,origin可能的取值为:
SEEK_SET,文件起始;SEEK_CUR,文件指针当前位置;SEEK_END,文件尾。
成功返回零值,否则返回非零值。
fsetpos
功能:
定位流位置指示器。
将流位置指示器定位到一个由值由fgetpos函数获取的fpos_t指针指向的位置的新的位置。
产生的其它影响与fseek相同。
用法:
intfsetpos(FILE*pFile,constfpos_t*pos)。
成功则返回零值,否则返回非零值且将全局errno变量设置为某确定值。
ftell
功能:
获取位置指示器在流中的当前位置。
对二进制流,返回值等于从文件起始位置的偏移字节数;对文本流,返回的值不能确保一定是从文件起始位置的偏移字节数,但返回值仍可用于重定位流位置指示器到此位置。
用法:
longintftell(FILE*pFile),成功则返回当前位置指示器的值,如果出错,返回-1L,设置全局errno变量。
fwrite
功能:
向流中写数据块。
其参数解释等与fread相对应。
用法:
size_tfwrite(constvoid*ptr,size_tsize,size_tcount,FILE*pFile),成功写入的元素数将被返回,如果这个数与count不符,则表明出现了错误。
getc
功能:
返回指定流的内部文件位置指示器当前所指向的字符,指示器指向下一个字符。
它与fgetc功能一样但是可能用宏实现,所以传过来的参数不能是可能导致其它含义的表达式。
用法:
intgetc(FILE*pFile)。
读取的字符将被作为int值返回,如果EOF或者读取错误,则返回EOF并且设置error与EOF指示器。
getchar
功能:
从标准输入获取一个字符。
用法:
intgetchar(),返回获取的字符,若EOF或发生错误,将返回EOF且设置error或EOF指示器。
gets
功能:
从标准输入获取一个字符串。
从标准输入读取一个字符串直到换行符为止并存储到传入的参数,换行符不包括在里面。
一个'\0'将自动被添加到字符串的最后。
gets没有提供限制读取字数限制,所以你需要自己留意输入的字符数没有超过传入参数所提供的空间。
用法:
char*gets(char*str),成功则返回str,如果EOF或没读取到字符则str不变且返回空指针。
发生错误也返回空指针。
perror
功能:
打印错误信息。
解读全局变量errno的值为一个字符串并且将其打印到stderr(标准错误输出流,通常是屏幕),可选以传入字符串开头。
errno是一个全局的描述最近一个错误的变量。
用法:
voidperror(constchar*str),如perror("mydeferr"),则可能的输出为mydeferr:
nosuchfiles.。
printf
功能:
打印已格式化字符串到标准输出流。
用法:
intprintf(constchar*format,...),其中format相关请参考上文中fprintf函数。
返回所写的总字符数,失败则返回负数。
putc
功能:
向流中写一个字符。
流位置指示器将前进一个字符。
putc与fputc功能类似但它可能为宏实现,参数要求不能为可能引起歧义的表达式。
用法:
intputc(intch,FILE*pFile),无错则返回ch,否则返回EOF且设置error指示器。
putchar
功能:
向标准输出流写一个字符。
用法:
intputchar(intch),返回ch,若出错则返回EOF且设置error指示器。
puts
功能:
向标准输出流输出一个字符串。
向stdout写入一个字符串并且最后添加一个换行符。
字符串最末的'\0'将被忽略。
fputs(str,stdout)起同样的效果但最后没有换行符。
用法:
intputs(constchar*str),返回一个非负数,出错返回EOF。
remove
功能:
删除参数中指定名字的文件。
这是一个直接对文件进行的操作。
用法:
intremove(constchar*filename),如果删除成功则返回零值,否则返回非零值并且errno会被设置为相应值。
调用perror函数可以向标准流打印错误信息。
rename
功能:
重命名文件或文件夹。
如果旧名字与新的名字在不同的路径,如果操作系统支持文件将被移动到新的位置。
用法:
intrename(constchar*oldname,constchar*newname),如果文件被成功重命名,则返回零值;否则返回非零值且设置errno为对应值。
errno是一个对应错误类型的数值。
调用perror函数可以向标准流打印错误信息。
rewind
功能:
定位位置指示器到开始。
将与流关联的位置指示器定位到文件的开头,对rewind的调用与fseek(pFile,OL,SEEK_SET)等价,除了一点,就是rewind会清除error指示器。
用法:
rewind(FILE*rewind),无返回值。
scanf
功能:
从标准输入流读入指定格式的数据。
参数一指定格式与附加参数个数与格式。
用法:
intscanf(constchar*format,...),其中format的相关内容参见fscanf函数的讲解。
返回成功读取的项目数,即附加参数个数,这个数字可能比期望的项目少,匹配失败时甚至可能是零。
如果在任何数据被成功读取之前出现输入失败,