概述
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 errorn");
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 errorn");
fclose(fp);
exit(-1);
}
printf("成功读取%d 个字节数据: %sn", 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
文件,将文件的读写位置移动到文件末尾,然后再获取当前的位置偏移量,也就得到了整个文件的大小。
编译测试:
最后
以上就是飘逸招牌为你收集整理的Linux 应用编程之fseek()、ftell()函数的全部内容,希望文章能够帮你解决Linux 应用编程之fseek()、ftell()函数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复