5
A
回答
3
是的,您正在尋找lseek
。
0
是的,你可以使用lseek()
:
off_t lseek(int fd, off_t offset, int whence);
的
lseek()
功能重新定位,根據該指令與文件描述符fd
相關的說法offse
噸打開文件的偏移whence
如下:
SEEK_SET
偏移量設置爲偏移字節。
SEEK_CUR
被設置爲它的當前位置加上偏移字節偏移量。
SEEK_END
被設置爲文件的大小加上偏移字節偏移量。
3
5
是的。您使用the same library中的lseek
函數。
然後,您可以尋找相對於文件的開頭或結尾或相對於當前位置的任何偏移量。
不要被該圖書館頁面淹沒。這裏有一些簡單的用法示例,可能大多數人都會需要:
lseek(fd, 0, SEEK_SET); /* seek to start of file */
lseek(fd, 100, SEEK_SET); /* seek to offset 100 from the start */
lseek(fd, 0, SEEK_END); /* seek to end of file (i.e. immediately after the last byte) */
lseek(fd, -1, SEEK_END); /* seek to the last byte of the file */
lseek(fd, -10, SEEK_CUR); /* seek 10 bytes back from your current position in the file */
lseek(fd, 10, SEEK_CUR); /* seek 10 bytes ahead of your current position in the file */
祝你好運!
8
有pread/pwrite函數接受文件偏移:
ssize_t pread(int fd, void *buf, size_t count, off_t offset);
ssize_t pwrite(int fd, const void *buf, size_t count, off_t offset);
+4
對此答案+1。對於多線程程序,'pread()'和'pwrite()'更好,因爲它們不會影響文件偏移量(所以多個線程可以從同一個文件描述符中讀取,而不需要任何鎖定,也不會在'lseek ()'和'read()')。 –
+1
也只有1個系統調用! –
相關問題
- 1. 更改文件描述符偏移量
- 2. C從文件描述符中讀取
- 3. 等待可讀文件描述符和可寫文件描述符
- 4. 寫入多個文件描述符
- 5. 讀取文件描述符HANGS
- 6. 寫作文件描述符
- 7. 讀取標準輸入文件描述符0中的值C
- 8. 段偏移對bs段描述符
- 9. 如何僅從已更改的文件描述符中讀取
- 10. 從C中的文件描述符讀取
- 11. Python基於偏移量寫入文件
- 12. 從C++的文本文件中讀取某個偏移量
- 13. C#讀取USB描述符
- 14. 寫入文件描述符3而不寫入磁盤?
- 15. 使用寫入將整數寫入文件描述符?
- 16. Linux C編程:並行讀取/寫入相同的文件描述符
- 17. 閱讀失敗:從InputStream Nougat讀取時讀取EBADF(壞文件描述符)
- 18. C文件描述符重複沒有共享偏移量或標誌
- 19. 原子附加在文件描述符上,但在什麼偏移量?
- 20. Android - java.lang.RuntimeException:無法從包中讀取輸入通道文件描述符
- 21. ArtifactDescriptorException:無法讀取工件描述符
- 22. 如何從shell腳本的後臺讀取文件描述符
- 23. 讀寫偏移
- 24. 文件描述符用XML編寫
- 25. InputStream從偏移量讀取數據
- 26. 如何寫入Bash中的命名文件描述符?
- 27. 無法讀取文件中提交日誌描述符
- 28. 從服務器讀取文件與一些偏移量
- 29. 將0個字符寫入文件描述符
- 30. 總共有多少個讀或寫文件描述符?
到底是什麼 「何處」 嗎?我對使用「孔」和「數據」這個詞有些困惑。數據非零值和孔零值? – zaloo
'whence'控制偏移量相對於什麼。所以,如果你用'SEEK_SET'請求10個字節,它將從文件開頭起10個字節。如果你用'SEEK_CUR'請求6個字節,則它將從文件開頭起16個字節。 – paddy
不要擔心間隙和孔洞。這是處理你尋求超過文件結尾的情況。 – paddy