lseek和offset做什么

时间:2018-10-27 14:52:54

标签: c linux unix system-calls

有人可以向我解释该程序的作用吗?我听不懂我创建了一个名为“ FILE”的文件,并在上面写了五个字母的单词。现在,该程序做什么?我不明白偏移量是什么...请向我解释,我知道这是简单的概念,但我似乎无法理解...谢谢。

#include <sys/types.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <unistd.h>
int main(void)
{
 int fd,i;
 fd=open("FILE",O_RDONLY);
 i=lseek(fd,50,SEEK_CUR);
 exit(0);
}

2 个答案:

答案 0 :(得分:2)

通常,查找此类问题答案的最佳位置是手册页。在大多数Linux / BSD / etc上。系统,只需键入man lseek(或您感兴趣的任何功能)即可找到它们。

在这种情况下,手册页将说明offset是要查找的字节数。确切的含义取决于whence参数,但这是每个参数的含义(从手册页中复制):

SEEK_SET
    The file offset is set to offset bytes.

SEEK_CUR
    The file offset is set to its current location plus offset bytes.

SEEK_END
    The file offset is set to the size of the file plus offset bytes.

因此,如果您输入五个字母的单词,请说“你好”,然后执行lseek(fd, 2, SEEK_SET),光标将位于第一个'l'之前,如果您的read()其余的文件,您将以“ llo”结尾。或者,如果您write()到文件,最终将覆盖“ llo”,但前两个字节将保持不变。

答案 1 :(得分:1)

程序以只读模式打开一个名为FILE的文件。然后代码将文件偏移量(当前读取位置)移至0f文件加上50个字节的起始位置。我认为混乱是因为我现在指向文件的末尾并且文件大小没有改变?这是预期的行为。有关更多信息,请参见http://man7.org/linux/man-pages/man2/lseek.2.html