Linux
read() 返回值能否超過計數值?
使用以下函式簽名
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 開始的緩衝區中。(強調補充。)