Linux标准IO库(fopen、fread、fwrite、fprintf、fscanf等)

Linux标准IO库接口定义在stdio.h头文件中,它的使用与底层文件描述符类似,需要先打开一个文件来建立一个访问路径,此操作的返回值将作为其他IO库函数的参数。

在标准IO库中,与底层文件描述符对应的是流(stream),它被实现为指向结构FILE的指针。

常用的标准I/O库函数如下:
1) fopen、fclose
2) fread、fwrite
3) fflush
4) fseek
5) fgetc、fputc、fgets
6) fprintf、fscanf
7) feof

fopen函数

FILE *fopen(const char *filename, const char *mode);

fopen在成功时返回非NULL的FILE *指针,失败时返回NULL。
参数mode表示文件的打开方式,取值如下:

1) “r”或“rb”:以只读方式打开
2) “w”或“wb”:以写方式打开,并把文件长度截短为0
3) “a”或“ab”:以写方式打开,新内容追加在文件尾部
4) “r+”或“rb+”或“r+b”:以修改方式打开(读和写)
5) “w+”或“wb+”或“w+b”:以修改方式打开,并把文件长度截短为0
6) “a+”或“ab+”或“a+b”:以修改方式打开,新内容追加到文件尾部
字母b表示文件是二进制文件而不是文本文件

fclose函数
关闭指定的文件流stream,使所有尚未写出的数据都写出。

int fclose(FILE *stream);

fread函数
从文件流中读数据,最多读取count个项,每个项size个字节,如果调用成功返回实际读取到的项个数(小于或等于count),如果不成功或读到文件末尾返回 0。

size_t fread(void *pth, size_t size, size_t nitems, FILE *stream);

返回真实读取的项数,若大于count则意味着产生了错误。

fwrite函数
向指定的文件中写入若干数据块,如成功执行则返回实际写入的数据块数目。该函数以二进制形式对文件进行操作,不局限于文本文件。

size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);

返回值:返回实际写入的数据块数目

fprintf函数
格式化输出到一个流/文件中

int fprintf (FILE* stream, const char*format, [argument])

fscanf函数
从一个流中执行格式化输入,fscanf遇到空格和换行时结束,注意空格时也结束。

int fscanf(FILE *stream, char *format,[argument…]);

返回值:整型,数值等于[argument…]的个数

feof函数
检测流上的文件结束符,如果文件结束,则返回非0值,否则返回0(即,文件结束:返回非0值,文件未结束,返回0值)

int feof(FILE *stream);

注意:feof判断文件结束是通过读取函数fread/fscanf等返回错误来识别的,故而判断文件是否结束应该是在读取函数之后进行判断。比如,在while循环读取一个文件时,如果是在读取函数之前进行判断,则如果文件最后一行是空白行,可能会造成内存错误。

使用feof与fscanf两个函数从文件中读取结构化记录时,建议使用如下方式:

while (3 == fscanf(fp, "%d %s %s", &a, str1, str2))
    {
    }

(未完)

猜你喜欢

转载自blog.csdn.net/qq_41688455/article/details/84823470