首页 > 技术文章 > 文件操作

KarryWang 2013-08-07 20:49 原文

文件操作包含在stdio.h里

#include<stdio.h>

FILE *fopen(const char *filename, const char *mode);
  fopen打开由filename参数指定的文件,并把它与一个文件流关联起来。mode参数制定文件的打开方式。fopen在成功时返回一个非空的FILE*指针,失败时返回NULL值

size_t fread(void *ptr, size_t size, size_t nitems, FILE *stream);
  fread库函数用于从一个文件流里读取数据。数据从文件流stream读到ptr只想的数据缓冲区里。fread和fwrite都是对数据记录进行操作,size参数指定每个数据记录的长度,计数器nitems给出要传输的记录个数,他的返回值是成功读到数据缓冲区里的记录个数(而不是字节数)。当达到文件尾是,它的返回值可能小于nitems, 甚至可能是零。

size_t fwrite(const void *ptr, size_t size, size_t nitems, FILE *stream);
  fwrite和fread有相似的接口。它从指定的数据缓冲区ptr里取出来数据记录,并把它们写到输出流stream中。返回值是成功写入的记录个数。

int fseek(FILE *stream, long int offset, int whence);
  fseek对文件的读写指针进行设置。可以用它来设置文件的下一个读写位置。读写指针既可设置为文件的某个绝对位置,也可以设置为相对于当前位置或文件为的某个相对位置。offset参数用来指定位置,而whence参数定义该偏移值的用法。成功返回0,-1表示失败并设置errno指出错误。whence可以取下列值之一:
      SEEK_SET: offset是一个绝对位置。
      SEEK_CUR: offset是相对于当前位置的一个相对位置。
      SEEK_END: offset是相对于文件尾的一个相对位置。

int fgetc(FILE *stream);
  fgetc函数从文件里取出下一个字节并把它作为一个字符返回。当它到达文件尾或出现错误时,返回EOF。具体情况必须通过ferror和feof来区分。
int getc(FILE *stream);
  getc函数的作用和fgetc一样,但它可能被实现为一个宏,如果是这样,stream参数就可能被计算不止一次,所以它不能有副作用。此外,你也不能保证能够使用getc的地址作为一个函数指针。
int getchar(FILE *stream);
  getchar的作用相当于getc(stdin),它从标准输入里读取下一个字符。


int fputc(int c, FILE *stream);
int getc(int c, FILE *stream);
  类似于fgetc和getc之间的关系,putc函数的作用也相当于fputc,但它可能被实现为一个宏。都是把字符当作int类型而不是char类型来使用。这就允许文件尾(EOF)标识取值-1,这是一个超出字符数字编码范围的值。

char fgets(char *s, int n, FILE *stream);
char gets(char *s);
  fgets把读到的字符写到s指向的字符串里,直到出现下面某种情况:遇到换行符,已经传输了n-1个字符,或者到达文件尾它会把遇到的换行符也传递到接收字符串里,再加上一个表示结尾的空字符\0.一次调用最多只能传输n-1个字符,因为它必须把空字节加上一结束字符串。当完成时,fgets返回一个指向字符串s的指针。如果文件流已经到达文件尾,fgets会设置这个文件流的EOF表示并返回一个空指针。如果出现读错误,fgets返回一个空指针并设置errno以指出错误类型。gets类似于fgets,只不过它从标准输入读取数据并丢失遇到的换行符。他在接收字符串的尾部加上一个null字节。

推荐阅读