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小时内删除。