为什么 lseek 不改变价值? (C)
Why isn't lseek changing value? (C)
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
吗?
file
是一个文件描述符。当你打印它时,你打印的是文件描述符,而不是偏移量。当你 lseek
它的偏移量为 52 时,文件描述符仍然是 3,所以它仍然打印 3.
您可以阅读有关文件描述符的更多信息here。
成功完成后,应返回从文件开头开始计算的以字节为单位的偏移量。
试试这个 printf("lseek_offset: %d\n", lseek(file, elf.offset, SEEK_SET));
你会混淆 file
和 file decriptor
。后者只是一个 non-negative 整数,用于标识打开的文件。
也许这个例子可以帮助你更好地理解这两个概念:
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
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
吗?
file
是一个文件描述符。当你打印它时,你打印的是文件描述符,而不是偏移量。当你 lseek
它的偏移量为 52 时,文件描述符仍然是 3,所以它仍然打印 3.
您可以阅读有关文件描述符的更多信息here。
成功完成后,应返回从文件开头开始计算的以字节为单位的偏移量。
试试这个 printf("lseek_offset: %d\n", lseek(file, elf.offset, SEEK_SET));
你会混淆 file
和 file decriptor
。后者只是一个 non-negative 整数,用于标识打开的文件。
也许这个例子可以帮助你更好地理解这两个概念:
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