C stdio无缓冲复用

我正在研究一个需要非常密切(非缓冲)管道二进制流的小程序。 它必须依赖select()多路复用,并且永远不允许“保持现有输入,除非有更多输入已经到达,因为它现在还不值得”。

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

  • 只要我使用无缓冲的stdio,我可以安全地在流的底层文件描述符上使用select()吗? 如果不是,我怎样才能确定一个文件流,不会阻止一组?
  • 除了char-by-char函数( getchar()和friends)之外,是否有任何调用将所有输入从libc传输到应用程序?

  • 尽管我并不完全清楚它是否受到标准的制裁,但在f没有缓冲的情况下,在fileno(f)上使用select应该在实践中工作。 请记住,无缓冲的stdio可以执行病态的恶意,并且您不允许更改缓冲,除非您在使用流之前的第一个操作。

    如果您唯一担心的是能够执行格式化输出,则新标准化的POSIX-2008 dprintf (和vdprintf )功能可能是针对您的问题的更好解决方案。

    链接地址: http://www.djcxy.com/p/68801.html

    上一篇: C stdio unbuffered multiplexing

    下一篇: Writing a list to a file with Python