1、fseek()函数
库函数 fseek()用于设置文件读写位置偏移量。
#include <stdio.h>
int fseek(FILE *stream, long offset, int whence);
stream:FILE 指针。
offset:偏移量,以字节为单位
whence:用于定义参数 offset 偏移量对应的参考值,该参数为下列其中一种(宏定义):
⚫ SEEK_SET:读写偏移量将指向 offset 字节位置处(从文件头部开始算);

⚫ SEEK_SET:读写偏移量将指向 offset 字节位置处(从文件头部开始算);
⚫ SEEK_CUR:读写偏移量将指向当前位置偏移量 + offset 字节位置处,offset 可以为正、也可以为负,如果是正数表示往后偏移,如果是负数则表示往前偏移;
⚫ SEEK_END:读写偏移量将指向文件末尾 + offset 字节位置处,同样 offset 可以为正、也可以为负, 如果是正数表示往后偏移、如果是负数则表示往前偏移。
返回值:成功返回 0;发生错误将返回-1,并且会设置 errno 以指示错误原因。
示例代码:使用 fseek()调整文件读写位置
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *fp = NULL;
char rd_buf[100] = {0};
char wr_buf[] = "Linux应用编程,开心快乐每一天!";
int ret;
/* 打开文件 */
if (NULL == (fp = fopen("./test_file", "w+")))
{
perror("fopen error");
exit(-1);
}
printf("文件打开成功!\n");
/* 写文件 */
if (sizeof(wr_buf) >
fwrite(wr_buf, 1, sizeof(wr_buf), fp))
{
printf("fwrite error\n");
fclose(fp);
exit(-1);
}
printf("数据写入成功!\n");
/* 将读写位置移动到文件头部 */
if (0 > fseek(fp, 0, SEEK_SET))
{
perror("fseek error");
fclose(fp);
exit(-1);
}
/* 读文件 */
if (sizeof(wr_buf) > (ret = fread(rd_buf, 1, sizeof(wr_buf), fp)))
{
printf("fread error\n");
fclose(fp);
exit(-1);
}
printf("成功读取%d 个字节数据: %s\n", ret, rd_buf);
/* 关闭文件 */
fclose(fp);
exit(0);
}
程序中首先调用 fopen()打开当前目录下的 test_file 文件,参数 mode 设置为"w+";接着调用 fwrite()将 wr_buf 缓冲区中的字符串数据"Linux应用编程,开心快乐每一天!"写入到文件中;由于调用了 fwrite(),所以此时的读写位置已经发生了改变,不再是文件头部,所以程序中调用了 fseek()将读写位置移动到了文件头,接着调用 fread()从文件头部开始读取刚写入的数据,读取成功之后打印出信息。
运行测试:


2、ftell()函数
库函数 ftell()可用于获取文件当前的读写位置偏移量。
#include <stdio.h>
long ftell(FILE *stream);
参数 stream 指向对应的文件,函数调用成功将返回当前读写位置偏移量;调用失败将返回-1,并会设置 errno 以指示错误原因。
示例代码:使用 fseek()和 ftell()函数获取文件大小
编译测试:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *fp = NULL;
int ret;
/* 打开文件 */
if (NULL == (fp = fopen("./testApp.c", "r")))
{
perror("fopen error");
exit(-1);
}
printf("文件打开成功!\n");
/* 将读写位置移动到文件末尾 */
if (0 > fseek(fp, 0, SEEK_END))
{
perror("fseek error");
fclose(fp);
exit(-1);
}
/* 获取当前位置偏移量 */
if (0 > (ret = ftell(fp)))
{
perror("ftell error");
fclose(fp);
exit(-1);
}
printf("文件大小: %d 个字节\n", ret);
/* 关闭文件 */
fclose(fp);
exit(0);
}
首先打开当前目录下的 testApp.c 文件,将文件的读写位置移动到文件末尾,然后再获取当前的位置偏移量,也就得到了整个文件的大小。
编译测试:

本文详细介绍了C语言标准库中的fseek()函数用于设置文件读写位置,以及ftell()函数获取当前偏移量的应用实例。通过示例展示了如何在程序中移动文件指针并跟踪文件大小。

2428

被折叠的 条评论
为什么被折叠?



