-3
unsigned int file = open(argv[1], O_RDONLY);

printf("%u\n", file);
printf("%u\n", elf.offset);

lseek(file, elf.offset, SEEK_SET);

printf("%u", file);

输出:

3
52
3

file应该设置为52

4

3 回答 3

1

file是一个文件描述符。当你打印它时,你打印的是文件描述符,而不是偏移量。当您lseek将其偏移到 52 时,文件描述符仍然是 3,所以它仍然打印 3。

您可以在此处阅读有关文件描述符的更多信息。

于 2020-11-02T02:12:07.473 回答
1

成功完成后,应返回从文件开头开始以字节为单位测量的结果偏移量。

试试这个printf("lseek_offset: %d\n", lseek(file, elf.offset, SEEK_SET));

于 2020-11-02T02:24:07.300 回答
1

file与混淆file decriptor。后者只是一个标识打开文件的非负整数。也许这个例子可以帮助你更好地理解这两个概念:

char buf[8];
int main(){
    int fd = open("test", O_RDONLY);
    off_t offset = lseek(fd, 0, SEEK_CUR);
    read(fd, buf, sizeof buf);
    printf("first read when offset = %d : %s\n", (int)offset, buf);

    offset = lseek(fd, 32, SEEK_SET);
    read(fd, buf, sizeof buf);
    printf("second read when offset = %d : %s\n", (int)offset, buf);

    return 0;
}

输出是:

first read when offset = 0 : 0000000

second read when offset = 32 : 4444444

以下是以下内容test

0000000\n    
1111111\n
2222222\n
3333333\n
4444444\n
于 2020-11-02T04:13:22.170 回答