C语言的文件随机访问fseek()和ftell()函数

您所在的位置:网站首页 随机函数c语言头文件 C语言的文件随机访问fseek()和ftell()函数

C语言的文件随机访问fseek()和ftell()函数

2024-07-10 17:03| 来源: 网络整理| 查看: 265

C语言的文件随机访问fseek()和ftell()函数

在这里插入图片描述

我们要讨论3个问题:fseek()和ftell()函数的工作原理、如何使用二进制流、如何让程序可移植。

fseek()与ftell()的工作原理

头文件:#include

定义函数:int fseek(FILE * stream, long offset, int whence);

**函数说明:fseek()用来移动文件流的读写位置. **

1.参数stream 为已打开的文件指针。

2.参数offset 是偏移量,该参数表示要从起始点开始要移动的距离,干参数必须是一个long类型的值,可以为正(前移),可以为负(向后移),或者为0(保持不动)。

3.参数 whence 是模式,该参数确定起始点。根据ANSI标准,在stdio.h头文件中规定了几个表示模式的**明示标量(manifest constant)。**如下表所示:

表1 文件的起始点模式

模式偏移量的起始点SEEK_SET文件开始处SEEK_CUT文件当前位置SEEK_END文件末尾

旧的实现可能缺少这些定义,可以用数值0L、1L、2L分别表示这3中模式。L表明其值是long类型。

下面是调用fseek()函数的一些示例,fp是一个文件指针:

fseek(fp, 0L, SEEK_SET); //定位至文件开始处 fseek(fp, 10L, SEEK_SET); //定位至文件中的第10个字节 fseek(fp, 2L, SEEK_CUR); //从文件当前位置前移2个字节 fseek(fp, 0L, SEEK_END); //定位至文件结尾 fseek(fp, -10, SEEK_END); //从文件结尾处回退10个字节

对于这些调用还有一些限制,后面会讨论。如果一切正常,fseek函数的返回值为0;如果出现错误(例如试图移动的距离超出了文件的范围),其返回值是-1。

ftell() 函数用来获取文件读写指针的当前位置,其原型为: long ftell(FILE * stream);

【参数】stream 为已打开的文件指针。

【返回值】成功则返回当前的读写位置,失败返回 -1。

对于二进制文件,则返回从文件开头到结尾的字节数。

对于文本文件,返回的数值可能没有实际意义,但仍然可以用来保存当前的读写位置,供 fseek() 函数使用

在随机方式存取文件时,由于文件位置频繁的前后移动,程序不容易确定文件的当前位置。使用fseek函数后再调用函数ftell()就能非常容易地确定文件的当前位置。ftell() 经常和 fseek() 一起使用。

在最初的unix实现中,ftell()通过返回距文件开始处的字节数来确定文件的位置。文件的第1个字节到文件开始处的距离为0,以此类推。ANSI C规定,该定义适用于以二进制模式打开的文件,以文本文件打开的文件的情况不同。

下面来分析以下程序示例:

/* reverse.c -- displays a file in reverse order */ #include #include #define CNTL_Z '\032' /* eof marker in DOS text files */ #define SLEN 81 int main(void) { char file[SLEN]; char ch; FILE *fp; long count, last; puts("Enter the name of the file to be processed:"); scanf("%80s", file); if ((fp = fopen(file,"rb")) == NULL) { /* read-only mode */ printf("reverse can't open %s\n", file); exit(EXIT_FAILURE); } fseek(fp, 0L, SEEK_END); /* go to end of file */ last = ftell(fp); for (count = 1L; count


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3