lseek
调用lseek显式的为一个打开文件设置偏移量
#include <unistd.h>
off_t lseek(int fd, off_t offset, int where);
返回值:成功,返回新的文件偏移量;出错,返回-1
参数:
offset:
相对where偏移的位置,可以为正数也可以为负数。当为正数时,从where开始向后偏移offset个字节;当为负数时,从where开始向前偏移offset绝对值个字节。
where:
SEEK_SET 将文件的偏移量设置为距离文件开始处offset个字节
SEEK_CUR 将文件的偏移量设置为当前值加offset个字节
SEEK_END 将文件的偏移量设置为文件长度加offset个字节
注:
①lseek可以检测文件是否支持设置偏移量,如果文件描述符指向一个pipe、FIFO或网络套接字,则返回-1,并将errno设置为ESPIPE。
②文件偏移量可以大于当前文件大长度,在这种情况下,对该文件的下一次写将加长该文件,并在文件中构成一个空洞。位于文件中没有写过的字节都被读为0.
③lseek仅将当前文件的偏移量记录在内核中,它并不引起任何的I/O操作。然后,该偏移量用于下一个读或写操作(这也是为什么设置偏移量后要向文件中写一些内容才能创建空洞文件的原因)
例子: