Linux

read() 返回值能否超過計數值?

  • March 26, 2021

使用以下函式簽名

ssize_t read(int *fd*, void **buf*, size_t *count*);

雖然我確實根據手冊頁了解到,在成功案例中,返回值可以小於count,但是在任何情況下返回值都可以超過count嗎?

呼叫read()可能會導致在後台讀取的數據多於請求的數據(例如,從儲存中讀取完整塊,或提前讀取後續塊),但read()它本身永遠不會返回比請求更多的數據(count)。如果是這樣,結果很可能是緩衝區溢出,因為buf通常只針對count字節進行大小調整。

POSIX(請參閱上面的連結)明確指定此限制:

成功完成後,如果nbyte大於 0,read()將標記更新文件的最後一次數據訪問時間戳,並返回讀取的字節數。**這個數字永遠不會大於nbyte。**

Linux 手冊頁不是很明確,但它確實說

read()嘗試將文件描述符fd中的count*****個字節讀取到從*buf 開始的緩衝區中。

(強調補充。)

引用自:https://unix.stackexchange.com/questions/641003