簡體   English   中英

為什么 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。

您可以在此處閱讀有關文件描述符的更多信息。

成功完成后,應返回從文件開頭開始的以字節為單位的偏移量。

試試這個printf("lseek_offset: %d\\n", lseek(file, elf.offset, SEEK_SET));

yon 將filefile 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM