Jiajinjin 2016-11-28
前面我分享了Linux文件系统调用的一些函数,是不带缓存的,一般是底层调用,今天来分享下上层的标准IO操作函数,也就是跨平台的,一般以f开头
1 fopen
函数原型 FILE * fopen(const char *path,cost char *mode)
作用:打开一个文件,返回指向该文件的指针
参数说明:第一个参数为欲打开文件的文件路径及文件名,第二个参数表示对文件的打开方式
注:mode有以下值:
r:只读方式打开,文件必须存在
r+:可读写,必须存在
rb+:打开二进制文件,可以读写
rt+:打开文本文件,可读写
w:只写,文件存在则文件长度清0,文件不存在则建立该文件
w+:可读写,文件存在则文件长度清0,文件不存在则建立该文件
a:附加方式打开只写,不存在建立该文件,存在写入的数据加到文件尾,EOF符保留
a+:附加方式打开可读写,不存在建立该文件,存在写入的数据加到文件尾,EOF符不保留
wb:打开二进制文件,只写
wb+:打开或建立二进制文件,可读写
wt+:打开或建立文本文件,可读写
at+:打开文本文件,可读写,写的数据加在文本末尾
ab+:打开二进制文件,可读写,写的数据加在文件末尾
由mode字符可知,上述如r、w、a在其后都可以加一个b,表示以二进制形式打开文件
返回值:文件打开了,返回一个指向该打开文件的指针(FILE结构);文件打开失败,错误上存error code(错误代码)
2 fclose
函数原型:int fclose(FILE *stream)
功能:关闭一个文件流,使用fclose就可以把缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区
3 fread
函数原型:size_t fread(void* buff,size_t size,size_t count,FILE* stream)
作用:从文件中读入数据到指定的地址中
参数:第一个参数为接收数据的指针(buff),也即数据存储的地址
第二个参数为单个元素的大小,即由指针写入地址的数据大小,注意单位是字节
第三个参数为元素个数,即要读取的数据大小为size的元素个素
第四个参数为提供数据的文件指针,该指针指向文件内部数据
返回值:读取的总数据元素个数
4 fwrite
函数原型:size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream )
作用:写入数据到指定的文件流中
参数:第一个参数为接收数据的指针(buff),也即数据存储的地址
第二个参数为单个元素的大小,即由指针写入地址的数据大小,注意单位是字节
第三个参数为元素个数,即要读取的数据大小为size的元素个素
第四个参数为提供数据的文件指针,该指针指向文件内部数据
返回值:写入的总数据元素个数
例子,把file.in的文件读出来,写入到file.out
5 fgetc
函数原型:int fgetc(FILE *stream)
作用:从一个流中读取一个字符
参数:一个FILE型的指针
返回值:getc 以 unsigned char 的方式读取文件流,扩张为一个整数,并返回。 意思就是, getc 从文件流中取一个字节(8位),并加上24个零,变成32位整型,成为一个小于256的整数, 然后返回
6 fputc
函数原型:int fputc(int ch, FILE *stream)
作用:往一个流中输入一个字符
参数:第一个参数ch虽然是整型,但fputc 将其写入文件流之前,,把整数的高24位去掉了
第二个参数是一个FILE型的指针
返回值:如果成功输入,fputc 返回 0,否则返回EOF(-1)
例子,把filegetc.in的文件读出来,写入到fileputc.out
7 fgets
函数原型:char *fgets(char *s, int n, FILE *stream)
作用:从流中读取n-1个字符,末尾有一个结束标志’\0’
参数:第一个参数s是来接收字符串
第二个参数是字符个数
第三个参数是一个FILE型的指针
返回值:如果成功则返回s的指针,否则返回NULL
注意:这种读的方式,每次遇到换行就会结束,所以读的时候需要用while循环
8 fputs
函数原型:int fputs(const char * s, FILE *stream);
作用:从流中写入字符串
参数:第一个参数s是输入字符串
第二个参数是一个FILE型的指针
返回值:如果成功则回一个非负的值,否则,错误返回EOF
例子:把filegets.in的文件读出来,写入到fileputs.out
当然这个n可以调大一点,使其每次尽量读一整行
好了,Linux标准IO操作函数fopen fclose fread fwrite fgetc fputc fgets fputs就分享到这里,如有问题,欢迎指正,谢谢。