簡體   English   中英

如何在C中復用緩沖IO?

[英]How is one to multiplex buffered IO in C?

我正在使用C中的簡單聊天服務器。為了從所有客戶端獲取傳入消息,我需要使用select系統調用。 我已經決定使用stdio函數來stdio它,但是我擔心庫的緩沖會搞亂select的使用(即數據將保持緩沖,從fd讀取但不可見)。 應該使用什么函數來復用C中的緩沖I / O?

在我寫這篇文章時,我記得文件流可以放入無緩沖模式。 那會有用嗎?

不幸的是,無緩沖模式無濟於事。 例如, fgets()將根據需要讀取盡可能多的數據,直到讀取整行(或填充用戶提供的緩沖區)。 為此,它將多次調用底層的read() ,即使是無緩沖的,並且第一個之后的調用將不在您的控制之下。 這同樣適用於fscanf()fprintf() ,甚至fread()fwrite()

如果你真的堅持使用stdio,你可以在多個線程中執行阻塞IO,但這不值得麻煩(以及潛在的系統過載)。 使用多路復用IO的唯一合理方法是使用低級讀取操作來讀取數據,然后使用stsio工具(如sscanf對其進行解析。

暫無
暫無

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

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