Lseek
lseek()的作用是,设置文件内容的读写位置。
每个打开的文件都有一个“当前文件偏移量”,是一个非负整数,用以度量从文件开始处计算的字节数。通常,读写操作都是从当前文件偏移量处开始,并使偏移量增加所读或写的字节数。默认情况下,你打开一个文件(open),除非指定O_APPEND参数,不然位移量被设为0。
使用lseek()需要包含的头文件:<sys/types.h>,<unistd.h>
函数原型:
off_t lseek(int fd, off_t offset, int whence);
off_t是系统头文件定义的数据类型,相当于signed int
参数:
fd:是要操作的文件描述符
whence:是当前位置基点。
SEEK_SET,以文件的开头作为基准位置,新位置为偏移量的大小。
SEEJ_CUR,以当前文件指针的位置作为基准位置,新位置为当前位置加上偏移量。
SEEK_END,以文件的结尾为基准位置,新位置位于文件的大小加上偏移量。
offset:偏移量,要偏移的量。可正可负(向后移、向前移);
返回值:
成功返回相对于文件开头的偏移量。 出错返回-1
#include <stdio.h>
#include <fcnlt.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unity.h> int main(int argc, char * argv[])
{
int fd;
char buf[];
if ((fd = open(argv[], O_RDONLY)) < ) {
perror("open");
exit(-);
}
read(fd, buf, );
write(STDOUT_FILENO, buf, );
lseek(fd, , SEEK_CUR); read(fd, buf, );
write(STDOUT_FILENO, buf, );
lseek(fd, -, SEEK_END); read(fd, buf, );
write(STDOUT_FILENO, buf, );
lseek(fd, , SEEK_SET); read(fd, buf, );
write(STDOUT_FILENO, buf, );
close(fd);
printf("\n"); return ;
}