2011-03-04 23 views
0

我正在向88kb的文件描述符寫入消息。我的linux系統上的文件描述符只能保存64kb。一旦數據被放在文件描述符上,它就會被讀取並傳輸到tcp連接中。如何停止C中的溢出文件描述符

我如何知道是否可以向文件描述符寫入更多數據,這意味着文件描述符爲空?我需要一個阻塞的函數,直到文件描述符爲空,或者至少可以返回一個值,讓我知道數據如何安全地寫入文件描述符。

回答

0

我認爲select()可能是你想要的。有了正確的參數,您可以安排 ,以阻止它直到您的文件描述符準備好用於您的I/O操作。

但是,您的問題有點奇怪,因爲我們通常不會將 文件描述符稱爲具有容量或「空」。這聽起來像也許是 你說的文件描述符代表管道的一個端點, 它是一個管道(不是文件描述符),其容量爲64KB。

0

聽起來對我來說更像是OP試圖發送大於配置的最大數據包大小的數據報(AF_UNIX或AF_INET/UDP)。其他可能性是管道和FIFO,它們具有最大的原子寫入大小;這裏的修復是做多個寫操作,連續寫操作將被阻塞,直到管道/ FIFO中有空間。