c语言标准库详解(五):stdio.h之直接IO/文件定位/错误处理

c语言标准库详解(五):之直接IO/文件定位/错误处理

直接输入/输出函数

fread()函数

size_t fread(void *ptr,size_t size,size_t nobj,FILE *stream)

fread函数从流 stream 中读取最多 nobj 个长度为 size 的对象,并保存到 ptr 指向的数组中。它返回读取的对象数目,此返回值可能小于 nobj。必须通过函数 feof 和 ferror获得结果执行状态。

fwrite()函数

size_t fwrite(const void *ptr,size_t size,size_t nobj,FILE *stream)

fwrite函数从ptr指向的数组中读取nobj个长度为size的对象,并输出到流stream中。它返回输出的对象数目。如果发生错误,返回值会小于 nobj 的值。

文件定位函数

fseek()函数

int fseek(FILE *stream,long offset,int origin)

fseek函数设置流 stream 的文件位置,后续的读写操作将从新位置开始。对于二进制文件,此位置被设置为从origin开始的第offset个字符处。Origin的值可以为SEEK_SET(文件开始处)、SEEK_CUR(当前位置)或 SEEK_END(文件结束处) 。对于文本流,offset必须设置为 0,或者是由函数 ftell 返回的值(此时 origin 的值必须是 SEEK_SET)。 fseek函数在出错时返回一个非 0 值。
注:

fseek()函数出错时返回的是非零值,不一定是-1(我被这个坑过)

ftell()函数

long ftell(File *stream)

ftell函数返回stream流的当前文件位置,出错时该函数返回-1L
注:

一般情况下,这个-1L与-1没有区别,但还是注意为好

rewind()函数

void rewind(FILE *stream)

rewind(fp)函数等价于语句fseek(fp, 0L, SEEK_SET);clearerr(fp)的执行结果。(clearerr函数见下文)

fgetpos()函数

int fgetpos(FILE *stream,fpos_t *ptr)

fgetpos 函数把 stream 流的当前位置记录在*ptr 中,供随后的 fsetpos 函数调用使用。若出错则返回一个非 0 值

fsetpos()函数

int fsetpos(FILE *stream,const fpos_t *ptr)

fsetpos 函数将流 stream 的当前位置设置为 fgetpos 记录在*ptr 中的位置。若出错则返回一个非 0 值

错误处理函数

当发生错误或到达文件末尾时,标准库中的许多函数都会设置状态指示符。这些状态指示符可被显式地设置和测试。另外,整型表达式 errno(在中声明)可以包含一个错误编号,据此可以进一步了解最近一次出错的信息。

clearerr()函数

void clearerr(FILE *stream)

clearerr 函数清除与流 stream 相关的文件结束符和错误指示符。

feof()函数

int feof(FILE *stream)

如果设置了与 stream 流相关的文件结束指示符,feof 函数将返回一个非 0 值。

ferror()函数

int ferror(FILE *stream)

如果设置了与 stream 流相关的错误指示符,ferror 函数将返回一个非 0 值。

perror()函数

void perror(cinst char *s)

perror(s)函数打印字符串 s 以及与 errno 中整型值相应的错误信息,错误信息的具体内容与具体的实现有关。该函数的功能类似于执行下列语句:

fprintf(stderr, "%s: %s\n", s, "error message"); 

有关函数 strerror 的信息,以后再写。

你可能感兴趣的:(c语言)