簡體   English   中英

Linux讀取函數實現

[英]Linux read function implementation

我想知道當套接字描述符傳遞給它時以及傳遞文件描述符時read()函數是如何工作的。 在文件描述符的情況下,它總是按指定返回n個字節,如果沒有n個字節則返回更少。 但是在套接字描述符的情況下,它不必返回n個字節。 因此,為了確保我們是否已收到n個字節,我們必須放置一個應用程序邏輯並記錄我們收到的字節數,並在count為n時終止。 我的問題是,為什么我們在從文件中讀取時不必放置應用程序邏輯?

閱讀read(2)手冊頁:

man 2 read

你最好假設它總是可以返回少於傳遞給它的整個緩沖區的字節數(特別是因為它可能很難知道文件描述符是指一個套接字,一個tty,一些其他設備,一個管道,fifo或一些普通文件,還因為你可能有一些文件系統與非POSIX兼容的語義)。 您也可能已經到達文件末尾(EOF)等...

對於TCP套接字,請記住它們只是一個字節流,並且可以在多個讀取等中接收給定的單個發送等...特別是,消息塊可以由“網絡”(例如路由器)拆分/重組。 。

對於普通文件,請記住,當您的進程正在讀取它時,其他一些進程可能會更改它(例如寫入它,截斷它等等)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM