IO函数

rewind函数作用等同于 (void)fseek(stream, 0L, SEEK_SET);
用 法: void rewind(FILE *stream);
 
 
ftell()获得文件开始到目标位置的字节大小信息,需要以二进制模式fopen文件
 
fopen()函数不仅打开一个文件,而且建立了一个缓冲区(在读写模式下将建立两个缓冲区),还创建了一个包含文件和缓冲区相关数据的数据结构。不仅如此,fopen()还返回一个指向该结构的指针,供其他函数知道如何找到该结构。假设把这个值赋给了一个名为fp的指针变量。我们称fopen()函数打开了一个流。如果文件以文本模式打开,可以得到一个文本流;如果以二进制模式打开,那么就得到一个二进制流。
 
int ungetc (int c, FILE * fp);
函数将c指定的字符放回输入流中。如果向输入流中放入了一个字符,下一次调用标准输入函数就会读入那个字符
 
int fflush (FILE * fp);
调用fflush()函数可以将缓冲区中任何未写的数据发送到一个由fp指定的输出文件中去。这个过程成为刷新缓冲区(flush a buffer)。如果fp是一个空指针, 将刷新掉所有的输出缓冲。对一个输入流使用flush()函数的效果没有定义。只要最近一次使用流的操作不是输入操作,就可以对一个更新流(任何读-写模式的流)使用这个函数
 
int setvbuf (FILE * restrict fp, char * restrict buf, int mode, size_t size);
setvbuf()函数建立一个供标准I/O函数使用的替换缓冲区。打开文件以后,在没有对流进行任何操作以前,可以调用这个函数。由指针fp来指定流, buf指向将使用的缓冲区。如果buf的值不是NULL,就必须创建这个缓冲区。例如,可以声明一个1024个字符的数组,然后传递该数组的地址。但是,如果buf的值为NULL,函数会自动为自己分配一个缓冲区。size变量为setvbuf()函数指定数组的大小(size_t类型是一种派生整数类型)。mode将从下列选项中选取:_IOFBF表示完全缓冲(缓冲区满的时候刷新), _IOLBF表示行缓冲(缓冲区满的时候或者一个新行写入的时候刷新),_IONBF表示无缓冲。如果成功执行,函数会返回零值,否则返回一个非零值。
 
 
size_t fwrite (const void * restrict ptr, size_t size, size_t nmemb, FILE * restrict fp);
fwrite()函数将二进制数据写入文件。size_t类型是根据标准C类型定义的。它是sizeof运算符返回的类型,通常是unsigned int 类型。指针ptr是要写入的数据块的地址。size表示要写入的数据块的大小(以字节为单位)。nmemb表示数据块的数目。像一般函数那样,fp指定要写入的文件。例如,要保存一个256字节大小的数据对象(如一个数组),可以这样做:
  char buffer[256];
  fwrite (buffer, 256, 1, fp);
这一调用将一块256字节大小的数据块从缓冲区写入到文件。再者,要保存一个包含10个double值的数组,可以这样做
  double earnings[10];
  fwrite (earnings, sizeof (dobule), 10, fp);
这一调用将earnings数组中的数据写入文件,数据分成10快,每块都是double大小。
  fwrite()函数返回成功写入的项目数。正常情况下,它与nmemb相等,不过如果有写入错误的话,返回值就会小于nmemb。
 
 size_t fread (void * restrict ptr, size_t size, size_t nmemb, FILE * restrict fp);
fread()函数与fwrite()函数的参数相同。这时,ptr为读入文件数据的内存存储地址,fp指定要读取的文件。使用这一函数来读取通过fwrite()写入的文件数据。
 
当标准输入函数返回EOF时,通常表示已经到达了文件结尾。可是,这也有可能表示发生了读取错误。使用feof()和ferror()函数可以区分这两种可能性。如果最近一次输入调用监测到文件结尾,feof()函数返回一个非零值,否则返回零值。如果发生读写错误,ferror()函数返回一个非零值,否则返回零值
 
 
 
 
 
 
 
 
 
posted @ 2014-09-11 10:17  挨踢淫才  阅读(585)  评论(0编辑  收藏  举报