使用文件读写指针获取文件长度
我们会用到lseek
系统调用, 来移动文件读写指针.
man lseek # 在shell中使用该命令获取函数的信息, 如下
#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);
具体的操作流程如下
- 调用
lseek
并将其的第二个参数offset
和第三个参数whence
分别设置为__0__与__SEEK_END__, 将文件读写指针移动到文件的结尾处 - 同上, 第二次调用
lseek
, 只是whence
设置为__SEEK_CUR__; 并将计算返回的偏移量赋值给len
(实际在这里目的已经达成, 即获取到了文件的长度) - 第三次调用
lseek
, 把whence
设置为__SEEK_SET__, 将读写指针移动回文件开始处
实例:
int len;
/*获取文件长度并保持文件读写指针在文件开始处*/
if (lseek(fd, 0, SEEK_END) == -1) {
my_err("lseek", __LINE__);
/* __LINE__ 是一个预定义宏,表示当前代码所在的行号,用于获取错误发生的位置 */
}
if ((len = lseek(fd, 0, SEEK_CUR)) == -1) { // 前一个lseek调用已经将读写指针指向文件末尾
my_err("lseek", __LINE__);
}
if ((lseek(fd, 0, SEEK_SET)) == -1) { // 指向文件开头
my_err("lseek", __LINE__);
}