0

我正在向 88kb 的文件描述符写入一条消息。我的 linux 系统上的文件描述符只能容纳 64kb。一旦数据被放在文件描述符上,它就会被读取并通过管道传输到 tcp 连接中。

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

4

2 回答 2

1

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

不过,您的问题措辞有点奇怪,因为我们通常不将文件描述符称为具有容量或“空”。听起来您可能在谈论代表管道一个端点的文件描述符,它是具有 64 KB 容量的管道(不是文件描述符)。

于 2011-03-04T02:12:08.130 回答
0

对我来说听起来更像是 OP 正在尝试发送大于配置的最大数据包大小的数据报(AF_UNIX 或 AF_INET/UDP)。其他可能性是管道和 FIFO,它们具有最大的原子写入大小;这里的解决方法是进行多次写入,连续的写入将阻塞,直到管道/FIFO中有空间。

于 2011-03-04T02:29:34.423 回答