C stdio无缓冲多路复用



我正在开发一个小程序,该程序需要非常紧密地(无缓冲)传输二进制流。它必须依赖select()多路复用,并且永远不允许"保持现有的输入,除非有更多的输入到达,因为这还不值得"。

使用系统调用是可能的,但为了方便起见,我想使用stdio(也涉及字符串格式)。

  • 只要我使用的是无缓冲的stdio,我就可以在流的底层文件描述符上安全地使用select()吗?如果不是,如何确定不会从集合中阻止的FILE流
  • 除了逐字符函数(getchar()和friends)之外,是否有任何调用可以将所有输入从libc传输到应用程序

虽然我不完全清楚它是否受到标准的认可,但在f没有缓冲区时,在fileno(f)上使用select在实践中应该有效。但是,请记住,未缓冲的stdio可能会表现出病态的糟糕,并且不允许更改缓冲,除非是在使用流之前的第一次操作。

如果您唯一关心的是能够进行格式化输出,那么新标准化的in-POSIX-2008 dprintf(和vdprintf)函数可能是解决您问题的更好方案。

最新更新