DoubleLi

qq: 517712484 wx: ldbgliet

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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中,而fwriteptr中的size * nmemb个字节写到文件stream中。

返回值:

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

 

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

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

      nmemb是请求读或写的记录数,freadfwrite返回的记录数有可能小于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()后请作错误判断及处理。

posted on 2013-05-07 11:20  DoubleLi  阅读(1176)  评论(0编辑  收藏  举报