2011-03-04 25 views
0

我正在向88kb的文件描述符写入消息。我的linux系统上的文件描述符只能保存64kb。一旦数据被放在文件描述符上,它就会被读取并传输到tcp连接中。如何停止C中的溢出文件描述符

我如何知道是否可以向文件描述符写入更多数据,这意味着文件描述符为空?我需要一个阻塞的函数,直到文件描述符为空,或者至少可以返回一个值,让我知道数据如何安全地写入文件描述符。

回答

0

我认为select()可能是你想要的。有了正确的参数,您可以安排 ,以阻止它直到您的文件描述符准备好用于您的I/O操作。

但是,您的问题有点奇怪,因为我们通常不会将 文件描述符称为具有容量或“空”。这听起来像也许是 你说的文件描述符代表管道的一个端点, 它是一个管道(不是文件描述符),其容量为64KB。

0

听起来对我来说更像是OP试图发送大于配置的最大数据包大小的数据报(AF_UNIX或AF_INET/UDP)。其他可能性是管道和FIFO,它们具有最大的原子写入大小;这里的修复是做多个写操作,连续写操作将被阻塞,直到管道/ FIFO中有空间。