我用C++編程,發現pread非常有趣。爲什麼pread不能保證它讀取所有指定的字節?
pread()返回讀取的字節數。讀取的返回字節數可能與打算讀取的指定字節數不同。
爲什麼pread不能保證它讀取所有指定的字節?
這個限制來自哪裏?
我用C++編程,發現pread非常有趣。爲什麼pread不能保證它讀取所有指定的字節?
pread()返回讀取的字節數。讀取的返回字節數可能與打算讀取的指定字節數不同。
爲什麼pread不能保證它讀取所有指定的字節?
這個限制來自哪裏?
這可能發生,例如因爲較少的字節是實際可用 現在(也許是因爲我們接近於最終的文件,或者是因爲我們 是從管道讀取,或從終端),或因爲read()是由信號中斷的 。出錯時,返回-1,並適當地將errno設置爲 。在這種情況下,未指定文件 的位置(如果有)是否更改。
爲什麼pread不能保證它讀取所有指定的字節?
因爲它是這樣設計的。
因爲它提到here:
注意,這並不是一個成功的調用比請求轉移較少 字節的錯誤(請參閱read(2)和write(2))。
所以你只需要在這種情況下再次調用該函數。
所以你知道爲什麼嗎?這種行爲的根本原因是什麼? – syko
@syko這是設計。它支持將數據作爲可用塊傳送的I/O接口。 –