我是靠谱客的博主 飘逸招牌,这篇文章主要介绍Linux 应用编程之fseek()、ftell()函数,现在分享给大家,希望可以做个参考。

1、fseek()函数
库函数 fseek()用于设置文件读写位置偏移量。

复制代码
1
2
#include <stdio.h> int fseek(FILE *stream, long offset, int whence);
stream FILE 指针。
offset 偏移量,以字节为单位
whence 用于定义参数 offset 偏移量对应的参考值,该参数为下列其中一种(宏定义):
SEEK_SET :读写偏移量将指向 offset 字节位置处(从文件头部开始算);
SEEK_CUR :读写偏移量将指向当前位置偏移量 + offset 字节位置处, offset 可以为正、也可以为负,如果是正数表示往后偏移,如果是负数则表示往前偏移;
SEEK_END :读写偏移量将指向文件末尾 + offset 字节位置处,同样 offset 可以为正、也可以为负, 如果是正数表示往后偏移、如果是负数则表示往前偏移。
返回值: 成功返回 0 ;发生错误将返回 -1 ,并且会设置 errno 以指示错误原因。
示例代码:使用 fseek()调整文件读写位置
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#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() 可用于获取文件当前的读写位置偏移量。
复制代码
1
2
#include <stdio.h> long ftell(FILE *stream);
参数 stream 指向对应的文件,函数调用成功将返回当前读写位置偏移量;调用失败将返回 -1 ,并会设置 errno 以指示错误原因。
示例代码:使用 fseek()和 ftell()函数获取文件大小
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#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内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(75)

评论列表共有 0 条评论

立即
投稿
返回
顶部