您的位置:首页 > 运维架构

文件操作函数(fread,fwrite,fseek,fopen,fclose)

2013-05-07 11:20 309 查看
1.fread 和 fwrite:

fwrite和fread是以记录为单位的I/O函数,fread和fwrite函数一般用于二进制文件的输入输出。

声明:

#include <stdio.h> size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

参数解释:

size
指出一条记录的长度,
nmemb
指出要读或写多少条记录,这些记录在
ptr
所指的内存空间中连续存放,共占
size * nmemb
个字节,
fread
从文件
stream
中读出
size * nmemb
个字节保存到
ptr
中,而
fwrite
ptr
中的
size * nmemb
个字节写到文件
stream
中。

返回值:

读或写的记录数,成功时返回的记录数等于nmemb,出错或读到文件末尾时返回的记录数小于nmemb,也可能返回0。

功能: fread()──从fp所指向文件的当前位置开始,一次读入size个字节,重复count次,并将读入的数据存放到从buffer开始的内存中;buffer是存放读入数据的起始地址(即存放何处)。 fwrite()──从buffer开始,一次输出size个字节,重复count次, 并将输出的数据存放到fp所指向的文件中。buffer是要输出数据在内存中的起始地址(即从何处开始输出)。

fread
fwrite
用于读写记录,这里的记录是指一串固定长度的字节,比如一个
int
、一个结构体或者一个定长数组。


  nmemb
是请求读或写的记录数,
fread
fwrite
返回的记录数有可能小于
nmemb
指定的记录数。例如当前读写位置距文件末尾只有一条记录的长度,调用
fread
时指定
nmemb
为2,则返回值为1。如果当前读写位置已经在文件末尾了,或者读文件时出错了,则
fread
返回0。如果写文件时出错了,则
fwrite
的返回值小于
nmemb
指定的值。下面的例子由两个程序组成,一个程序把结构体保存到文件中,另一个程序和从文件中读出结构体。

2.fseek用法 int fseek(FILE *stream, long offset, int fromwhere);

参数: 第一个参数file指针 第二个参数移动的偏移量 第三个参数移动到哪里 分别用3个宏
SEEK_SET 既0 文件开头 SEEK_CUR 既1 文件当前位置 SEEK_END 既2 文件结尾 不推荐用数字 最好用宏
简言之: fseek(fp,100L,SEEK_SET);把fp指针移动到离文件开头100字节处; fseek(fp,100L,SEEK_CUR);把fp指针移动到离文件当前位置100字节处; fseek(fp,100L,SEEK_END);把fp指针退回到离文件结尾100字节处。 此函数跟ftell函数结合常用来计算流的长度: fseek(fp, 0, SEEK_END); long filelength = ftell(fp);

3.fopen、fclose

fopen:功能打开文件

fclose:功能关闭文件

头文件:#include<stdio.h>

定义函数:FILE * fopen(const char * path,const char * mode);

函数参数说明:

path:字符串包含欲打开的文件路径及文件名。 mode:字符串则代表着流形态,取值如下: "r " 打开只读文件,该文件必须存在。 "r+ "打开可读写的文件,该文件必须存在。 "w "打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。 "w+ "打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。 "a "以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。 "a+" 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。

上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。不过在POSIX系统,包含Linux都会忽略该字符。由fopen()所建立的新文件会具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)权限,此文件权限也会参考umask 值。

返回值:

文件顺利打开后,指向该流的文件指针就会被返回。若果文件打开失败则返回NULL,并把错误代码存在errno 中。 附加说明

一般而言,打开文件后会作一些文件读取或写入的动作,若开文件失败,接下来的读写动作也无法顺利进行,所以在fopen()后请作错误判断及处理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐