如果我有一個大小爲5的文件,並且使用lseek來尋找位置10,然後使用read從此位置讀取1個字節,則讀取系統調用的返回值爲0. I在下列情況下想要知道lseek/read/write的返回值: 如果我試圖超過文件系統允許的最大文件大小,然後執行讀取操作。我們可以看看這個位置嗎?這是一個錯誤嗎?如果不是,如果我在這裏做一個讀取什麼是讀取的返回值? 0或-1?UNIX lseek /讀/寫行爲
0
A
回答
3
,你被允許設置超出文件的末尾位置的POSIX specs for lseek()
狀態:
的lseek的()函數應允許文件偏移設置超出了現有數據的末尾文件。
如果所得位置超出從lseek()
返回的off_t
可變類型的邊界只抱怨。似乎沒有指定的錯誤消息表明「超出了特定於進程的限制」或「超出了文件系統本身的容量」。
然而,試圖延長後與write()
尋求可以返回EFBIG
錯誤代碼,再次according to POSIX文件。最好的辦法是實際嘗試一下,看看其行爲是什麼,尤其是,因爲在所有情況下Linux不一定符合POSIX - 換句話說,符合POSIX的UNIX系統和Linux之間的行爲可能不同。
的POSIX read()
specs是相當堅定的關於會發生什麼:應通過當前檔案結尾出現
無數據傳送。如果起始位置在文件結束處或之後,則返回0。
因此,你應該得到的,因爲後面的零,顧名思義,如果你做了一個lseek()
超出了文件系統的容量,你確實超出了文件的末尾(您不能創建更大的文件比文件系統允許)。
相關問題
- 1. UNIX讀取行爲
- 2. UNIX讀取()/寫入()函數
- 3. 打印最後10行文件或標準輸入讀寫和lseek
- 4. 行爲讀()中的Unix中斷時
- 5. 失敗的「寫入」unix系統調用
- 6. O_APPEND標誌和lseek
- 7. lseek問題
- 8. 讀寫超時行爲
- 9. 在C中讀取/寫入UNIX管道
- 10. Unix上的C++讀寫文件
- 11. unix讀取和寫入功能
- 12. Lseek不工作
- 13. C用lseek /讀/寫刪除一個大的二進制文件的部分
- 14. 作爲並行任務進行讀寫
- 15. 有沒有「lseek」移動?
- 16. lseek()用於複製文件
- 17. 如何在C++中將二進制讀取/寫入轉換爲非二進制讀取/寫入
- 18. 寫從UNIX
- 19. 可讀可寫的流意外行爲
- 20. Unix:我如何讀取多行?
- 21. n次讀寫行
- 22. 在Unix中將Unix時間轉換爲可讀日期
- 23. Unix的讀命令的行爲在文件輸入重定向
- 24. lseek給出ESPIPE錯誤
- 25. 如何使用lseek讀取文件的最後一個字符
- 26. 用於讀/ proc /進程/ MEM偏移lseek的
- 27. 如何在R上爲Windows編寫Unix行尾文件
- 28. 系統調用lseek導致段錯誤
- 29. GET-POINTER-VALUE - Unix的行爲?
- 30. execl在unix中的行爲
你試過了嗎? –
'read'返回實際讀取的字節數。 0聽起來適合我。 – zneak
或者有可能搜索本身可能會失敗,因此您只需在舊位置閱讀。但@Carl是對的,你應該嘗試一下,看看。 – paxdiablo