lseek
每个打开的文件都有一个与其关联的 “当前文件偏移量” 。它通常是一个非负整数,用来度量从文件开始处计算的字节数。一般情况,读、写操作都是从当前文件偏移量处开始,并使偏移量增加所读、写的字节数。打开一个文件时,偏移量被系统默认设置为 0 。
lseek 函数可以显式地为一个已经打开的文件设置偏移量。调用成功,返回新的文件偏移量,出错返回 -1 。
#include <sys/types.h> #include <unistd.h> off_t lseek(int fd, off_t offset, int whence);
whence 有如下参数:
- SEEK_SET:表示将该文件的偏移量设置为距文件开始处 offset 个字节。
- SEEK_CUR:表示将该文件的偏移量设置为其当前值加 offset 个字节,offset 可正可负。
- SEEK_END:表示将该文件的偏移量设置为文件长度加 offset,offset 可正可负。
PS:lseek() 不能用于管道、FIFO、socket 或终端。 lseek() 只是调整内核中与文件描述符相关的文件偏移量记录,并没有引起对任何物理设备的访问。