C语言函数fread() , fwrite() ,fseek()用法分析

网上已经有不少关于c语言函数fread() 和fwrite() 用法分析的文章,在此将这两个函数的用法写下来,是为了巩固所学,加深印象,也为了日后方便查询复习比较,如果能帮助到某些朋友,则是意外的惊喜。

fwrite()函数的意义是将某二进制数据写到指定的 文件流。函数的原型为: 

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

四个函数参数的意义分别为:1、const  void *buffer 为指向二进制数据来源的指针;2、size_t size 为每个数据单元所占的字节数;

3、size_t num 为需要读取的数据单元的个数; 4、FILE *stream 为目的文件指针。

返回值为实际写入目的文件的数据单元个数。 范例如下:

#include <stdio.h>
#include <stdlib.h>

void main()
{
	FILE *lb;
	char a[] = "Time is fast";

	if (NULL == (lb = fopen("test.txt", "w+")))   //!<打开文件
	{
		printf("Fail to open the file");
		exit(EXIT_FAILURE);
	}

	fwrite( a, sizeof(a), 1, lb);  //!<把a中数据写入文件lb
	fclose(lb);

	return ;
}

函数fseek()的原型是:int fseek(FILE *stream, long offset, int fromwhere)

后两个参数的意义分别为:

1、long offset 为偏移量,正数表示正向偏移(向尾部偏移),负数表示负向偏移(向首部偏移); 

2、int fromwhere 为偏移的起始点,对于fromwhere ,函数fseek定义了三个位置,对应如下:

SEEK_SET(对应 0):文件开头;

SEEK_CUR(对应 1):文件指针所指当前位置;

SEEK_END(对应2):文件结尾;

FILE *fp;

fseek(fp, 0, SEEK_SET); //!< 指针定位文件首部

fseek(fp, 100, SEEK_CUR); //!< 指针定位离当前位置100个字节的地方

fseek(fp, -100, SEEK_END); //!< 指针定位离文件末尾100个字节(文件首部方向)的地方

3、返回值:  如果函数执行成功,FILE *stream将指向以fromwhere 为起始点,偏移offset个字节的位置,返回返回0。若函数执行失败(比如offset超过了文件自身的大小),则不改变stream指向的位置,返回非0值。

若文件偏移超出了文件末尾位置,还是返回0,;若往回偏移超出了文件首部,返回-1,。


函数fread() 的原型是:size_t fread( void *buffer, size_t size, size_t num,FILE *stream)

四个参数的意义可参考fwrite()。稍微不同之处是:fwrite()是将数据从*buffer 写到 FILE *stream;而fread()是将数据从

FILE *stream写到*buffer,是一个相反的过程。范例如下:

#include <stdio.h>
#include <stdlib.h>

void main()
{
	FILE *lb;
	char a[] = "Time is fast";
	char b[20];

	if (NULL == (lb = fopen("test.txt", "w+")))   //!<打开文件
	{
		printf("Fail to open the file");
		exit(EXIT_FAILURE);
	}

	fwrite( a, sizeof(a), 1, lb);  //!<把a中数据写入文件lb
	fseek(lb, 0, SEEK_SET);        //!<把指针lb定位到文件初始位置
	fread(b, sizeof(a), 1, lb);	   //!<从lb指向的地址开始将一定长度数据写到b

	printf("a[] = %s\n", a);
	printf("b[] = %s\n", b);
	fclose(lb);

	return ;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值