stdio.h
本文所总结的内容是我学习头文件cstdio与stdio.h并查阅书籍和网络所得。
stdio.h,应该是跟我差不多学习经历(C-->C++-->?)的人所接触到的第一个头文件,说它是最熟悉用得最多的头文件之一应该一点也不为过。可是,对它,我除了经常用到的printf与scanf,又知之几何呢?
这里循cstdio头文件(i386-pc-mingw32 gcc 4.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;
fprintf作用 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头文件中定义的结构。一般来说,它用于对文件进行操作的函数的参数或者返回值等等。它在头文件中的定义如下(成员后面的注释援引自百度知道,准确与否我查资料未果,到后来专门个时间将FILE结构体解读一下):
typedef struct _iobuf
{
char* _ptr; // 文件输入的下一个位置
int _cnt; // 当前缓冲区的相对位置
char* _base; // 指基础位置(即是文件的起始位置)
int _flag; // 文件状态标志
int _file; // 文件的有效性验证
int _charbuf; // 检查缓冲区状况,如果无缓冲区则不读取
int _bufsiz; // 缓冲区大小
char* _tmpfname; // 临时文件名
} FILE;
fpos_t
一种类型,包含的指定在一个文件中的位置的信息(Object containing information to specify a position within a file)。是一种基本类型的别名,在MSVCRT下为long long,其它环境下为long。可见其定义:
#ifdef __MSVCRT__
typedef long long fpos_t;
#else
typedef long 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, int num, FILE *pFile),str将存储目标字符串,num指示读取字符数+1。返回值为char*类型。如果正常读取,将返回str,如果没有字符被读取并且到达EOF,str的值将不变且返回空指针。如果有错误发生,会返回空指针。
fopen
功能 :以指定的模式打开指定名字的文件,将其与一个可以对文件进行操作的流进行关联并返回FILE*。打开模式决定了流能对文件进行哪些操作。
用法 :fopen(const char* filename, const char* 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, const char *format, ...)。如果成功,写入字符总数将被作为int型返回,否则将返回负值。其中format参数中指定附加参数时格式为:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论