所以我有一個包含 10 個單詞,每個單詞 5 個字符的文本檔案,我想到達該檔案的中點而不必多次呼叫 read,所以我想使用 lseek。據我了解,lseek 僅使用 SET、CUR 和 END 標志。
所以如果我有一個文本檔案并且所有的單詞只有 5 個單詞長......
我可以SEEK_SET用來獲取我所在的當前單詞 5
我可以SEEK_CUR用來到達下一個單詞的位置,所以 10,然后是 15,依此類推
我可以用到SEEK_END100。
我的問題是,如果我想介于兩者之間,比如 76 或 24 點,或者在我的情況下是 50 點,我該怎么做?我嘗試將 lseek 與 SEEK_SET / 2 一起使用,但它不起作用。
uj5u.com熱心網友回復:
您似乎對這些標志的作用感到困惑。從手冊頁:
概要 #include <sys/types.h> #include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);描述 lseek() 函式根據指令將與檔案描述符 fd 關聯的打開檔案的偏移量重新定位到引數偏移量,如下所示:
SEEK_SET The offset is set to offset bytes. SEEK_CUR The offset is set to its current location plus offset bytes. SEEK_END The offset is set to the size of the file plus offset bytes.
因此,您將使用SEEK_SET轉到檔案中的特定位置,SEEK_CUR轉到相對于當前位置的位置,以及SEEK_END轉到相對于檔案末尾的位置。
在您的情況下,如果您有 10 個單詞,每個單詞 5 個字符,總共 50 個位元組,并且想要轉到中間,您希望使用SEEK_SET偏移量 25。例如:
lseek(fd, 25, SEEK_SET);
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/506668.html
