Linux 系统 IO之 lseek 函数
1. lseek 函数
1.1 头文件包含
#include <sys/types.h>
#include <unistd.h>
1.2 函数原型
off_t lseek(int fd, off_t offset, int whence);
1.3 函数功能
lseek
主要用来重新定位被打开文件的位移量
根据其特性,还可以实现如下两个功能:- 获取文件的大小
- 对文件进行向后扩展(文件件位置标记向后偏移 N 个字节,并且需要在 N+1 位置写如一个数据)
1.4 函数返回值
- 返回值为
正数 N
:表示当前文件位置标记向后移动 N 字节 - 返回值为
复数N
: 表述当前文件位置标记向前移动 N 字节
1.5 形参解释
int fd
:文件描述符off_t offset
:与 whence
组合使用int whence
:
SEEK_SET
: 将文件位置标记设置为从头部偏移 offset
字节 位置SEEK_CUR
:将文件位置标记设置为从当前位置偏移 offset
字节 位置SEEK_END
:将文件位置标记设置为从尾部偏移 offset
字节 位置
2. 案例程序
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
int fd = open("annNote", O_RDWR);
if( -1 == fd){
perror("open file");
exit(1);
}
int ret = lseek(fd, 0, SEEK_END);
printf("file length = %d\n", ret);
ret = lseek(fd, 100, SEEK_END);
printf("return value %d\n", ret);
write(fd, "#", 1);
close(fd);
return 0;
}