fopen, fwrite, fread详解
1、头文件
#include <stdio.h>
2、fopen
(1) 函数原型
FILE *fopen(char *filename, *type)
函数用来打开一个文件
(2) 参数解析
- filename,文件名
- type,打开方式
字符及其含义:
打开方式由r,w,a,t,b,+这六个字符拼成,含义如下
r(read):读
w(write):写
a(append):追加
t(txt):文本文件,可省略
b(banary):二进制文件
"r" 打开文字文件只读
"w" 创建文字文件只写
"a" 增补, 如果文件不存在则创建一个
"r+" 打开一个文字文件读/写
"w+" 创建一个文字文件读/写
"a+" 打开或创建一个文件增补
"b" 二进制文件(可以和上面每一项合用)
"t" 文这文件(默认项)
使用方式及含义
“rt” 只读打开一个文本文件,只允许读数据
“wt” 只写打开或建立一个文本文件,只允许写数据
“at” 追加打开一个文本文件,并在文件末尾写数据
“rb” 只读打开一个二进制文件,只允许读数据
“wb” 只写打开或建立一个二进制文件,只允许写数据
“ab” 追加打开一个二进制文件,并在文件末尾写数据
“rt+” 读写打开一个文本文件,允许读和写
“wt+” 读写打开或建立一个文本文件,允许读写
“at+” 读写打开一个文本文件,允许读,或在文件末追加数 据
“rb+” 读写打开一个二进制文件,允许读和写
“wb+” 读写打开或建立一个二进制文件,允许读和写
“ab+” 读写打开一个二进制文件,允许读,或在文件末追加数据
① 用”r”打开文件时,该文件必须存在,只读
② 用”w”打开文件时,若文件不存在,则创建,若存在,则将其删除,再创建一个文件
③ 用”a”打开文件时,可在其末尾写数据
(3) 函数调用成功返回FILE*指针,失败返回NULL
3、fwrite
(1) 函数原型
size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream )
(2) 参数解析
- ptr,要写入的数据的指针
- size,每个数据类型的大小
- count,数据个数
- stream,文件指针
(3) 函数调用成功返回写入数据的个数,如果返回值与count不同,为写错误
(4) 写操作后最好调用fclose关闭流。
4、fread
(1) 函数原型
size_t fread ( void * ptr, size_t size, size_t count, FILE * stream )
(2) 参数解析
- ptr,读取数据保存结果的指针
- size,每个数据类型的大小
- count,数据个数
- stream,文件指针
(3) 函数调用成功返回读取的数据个数,如果返回值与count不同,为读错误或者达到文件末尾
5、不关闭流的情况下,每次读或写数据后,文件指针都会指向下一个待写或者读数据位置的指针。
6、size_t
size_t类型是ANSI C提供的标准头文件里的一个数据类型,头文件为:#include <stddef.h>。该头文件一般位于/usr/lib/gcc/i486-linux-gnu/4.3.2/include目录下。定义如下:
#define __SIZE_TYPE__ long unsigned int
#define __SIZE_TYPE__ size_t
也就是说size_t实际是long unsigned int类型,在32位机器上为4字节,在64位机器上为8字节。
7、程序示例:
1 #include <stdio.h> 2 3 int main() 4 { 5 FILE* file = fopen("/home/share/code/fopen_test/test.txt", "wt+"); 6 if(file == NULL) 7 { 8 printf("fopen error"); 9 return -1; 10 } 11 12 size_t write_ret = fwrite("hello world", 1, sizeof("hello world"), file); 13 if(write_ret != sizeof("hello world")) 14 { 15 printf("fwrite error"); 16 return -1; 17 } 18 19 //将文件指针定位到文件开始,否则读取不到数据 20 fseek(file, 0, SEEK_SET); 21 22 char buf[32] = {0}; 23 size_t read_ret = fread(buf, 1, sizeof("hello world"), file); 24 if(read_ret != sizeof("hello world")) 25 { 26 printf("fread error"); 27 return -1; 28 } 29 30 fclose(file); 31 printf("%s\n", buf); 32 33 return 0; 34 }