C 主要函数解析

1、fseek 函数

int fseek(FILE *stream, long offset, int fromwhere);

第一个参数stream为文件指针

第二个参数offset为偏移量正数表示正向偏移,负数表示负向偏移

第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SET

SEEK_SET: 文件开头

SEEK_CUR: 当前位置

SEEK_END: 文件结尾

简言之:

fseek(fp,100L,0);把stream指针移动到离文件开头100字节处;

fseek(fp,100L,1);把stream指针移动到离文件当前位置100字节处;

fseek(fp,-100L,2);把stream指针退回到离文件结尾100字节处。

2、ftell函数

long ftell() 函数

作用是 获取文件的 当前指针位置 相对于 文件首地址 的 偏移字节数

示例(根据以上函数读取文件内容):

复制代码
static char* get_file_msg(char* file)
{
	FILE *fh = NULL;
	char *ptr = NULL;
	long flen = 0;
	int ret = 0;

	fh = fopen(file, "r");
	if(NULL == fh)
	{
		printf(" fopen err \n")
		goto end;
	}


	ret = fseek(fh, 0, SEEK_END)
	if(ret != 0)
	{
		printf(" fseek SEEK_END fail \n");
		goto end;
	}

 	flen = ftell(fh);
	if(flen < 0)
	{
		printf(" ftell failed [%d] ", errno);
		goto end;
	}

	ret = fseek(fh, 0, SEEK_SET);
	if(0 != ret)
	{
		printf("fseek SEEK_SET failed" );
		goto end;
	}

	ptr = (char*)malloc(flen + 1);
	memset(ptr, 0x00, flen+1);
	ret = fread(ptr, sizeof(char), flen, ret);
	if(flen != ret)
	{
		printf(" fread failed");
		free(ptr);
		ptr = NULL;
	}

end:
	if(NULL != fh)
	{
		fclose(fh);
	}

	return ;
}
相关推荐
努力学习的小廉2 分钟前
【C++】 —— 笔试刷题day_5
开发语言·c++
观无13 分钟前
C#的简单工厂模式、工厂方法模式、抽象工厂模式
java·开发语言·c#
MSTcheng.38 分钟前
【C语言】自定义类型:结构体,联合,枚举(下)
android·java·c语言
图图不是秃秃43 分钟前
Java构造方法详解:从入门到实战
java·开发语言
明月看潮生1 小时前
青少年编程与数学 02-010 C++程序设计基础 44课题、QT
开发语言·c++·qt·青少年编程·编程与数学
bryant_meng1 小时前
【python】OpenCV—Hough Circle Transform
开发语言·python·opencv·hough·圆形检测
问道飞鱼1 小时前
【云原生知识】如何搭建基于服务网关的分布式服务?
开发语言·云原生·istio·服务网格
酷酷的崽7981 小时前
如何在AVL树中高效插入并保持平衡:一步步掌握旋转与平衡因子 —— 旋转篇
c语言·数据结构·c++·算法
宇寒风暖1 小时前
一文弄懂编辑距离算法(Levenshtein Distance)示例,通过动态规划计算两个字符串之间的最小编辑操作次数(插入、删除、替换)
开发语言·数据结构·笔记·学习·算法·动态规划
EPSDA1 小时前
介绍HTTP协议基本结构与Linux中基本实现HTTPServer
linux·运维·开发语言·c++·网络协议·tcp/ip·http