C stdio无缓冲复用
我正在研究一个需要非常密切(非缓冲)管道二进制流的小程序。 它必须依赖select()
多路复用,并且永远不允许“保持现有输入,除非有更多输入已经到达,因为它现在还不值得”。
有可能使用系统调用,但是为了方便起见,我还想使用stdio(也包含字符串格式)。
select()
吗? 如果不是,我怎样才能确定一个文件流,不会阻止一组? getchar()
和friends)之外,是否有任何调用将所有输入从libc传输到应用程序? 尽管我并不完全清楚它是否受到标准的制裁,但在f
没有缓冲的情况下,在fileno(f)
上使用select
应该在实践中工作。 请记住,无缓冲的stdio可以执行病态的恶意,并且您不允许更改缓冲,除非您在使用流之前的第一个操作。
如果您唯一担心的是能够执行格式化输出,则新标准化的POSIX-2008 dprintf
(和vdprintf
)功能可能是针对您的问题的更好解决方案。