[英]How to make sure data is flushed to HDD (not buffered) on file IO (WriteFile())
[英]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.