簡體   English   中英

Linux字符設備 - 如果讀取緩沖區太小,該怎么辦?

[英]Linux character device — what to do if read buffer is too small?

我正在創建一個創建角色設備的linux設備驅動程序。 它在讀取時返回的數據在邏輯上分為16個字節的單位。

我計划通過返回許多適合讀緩沖區的單元來實現這個除法,但是我不知道如果讀緩沖區太小(<16字節)該怎么辦。

我該怎么辦? 或者,有沒有更好的方法來實現我想要代表的分工?

您可以像數據報套接字設備驅動程序一樣:它始終只返回一個數據報。 如果讀取緩沖區較小,則丟棄超出部分 - 調用者有責任為整個數據報提供足夠的空間(通常,應用程序協議指定最大數據報大小)。

您的設備文檔應指定它以16字節為單位工作,因此調用者沒有理由想要提供小於此的緩沖區。 因此,由於上述丟棄而導致的任何丟失數據都可能被視為調用應用程序中的錯誤。

但是,如果調用者要求它一次返回超過16個也是合理的 - 這表明應用程序將其分解為單元本身。 這可能會提高性能,因為它可以最大限度地減少系統調用。 但如果緩沖區不是16的倍數,則可以丟棄最后一個單元的剩余部分。 只要確保這是記錄在案的,所以他們知道要使它成為一個倍數。

如果您擔心像cat這樣的通用應用程序,我認為您不需要。 我希望他們使用非常大的輸入緩沖區,僅僅是出於性能原因。

暫無
暫無

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

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