C 标准无缓冲多路复用
我正在开发一个小程序,它需要非常紧密地传输二进制流(无缓冲)。它必须依赖于C 标准无缓冲多路复用,c,C,我正在开发一个小程序,它需要非常紧密地传输二进制流(无缓冲)。它必须依赖于select()多路复用,并且永远不允许“保留现有输入,除非有更多输入到达,因为它还不值得” 可以使用系统调用,但为了方便起见,我想使用stdio(也涉及字符串格式) 只要使用无缓冲的stdio,我就可以在流的底层文件描述符上安全地使用select()?如果不是,我如何确定一个文件流不会从集合中阻塞 除了char by char函数(getchar()和friends)之外,是否有任何调用将所有输入从libc传输到应用程
select()
多路复用,并且永远不允许“保留现有输入,除非有更多输入到达,因为它还不值得”
可以使用系统调用,但为了方便起见,我想使用stdio(也涉及字符串格式)
- 只要使用无缓冲的stdio,我就可以在流的底层文件描述符上安全地使用
?如果不是,我如何确定一个文件流不会从集合中阻塞select()
- 除了char by char函数(
和friends)之外,是否有任何调用将所有输入从libc传输到应用程序getchar()
fileno(f)
上使用select
实际上应该在f
未缓冲时起作用。但是请记住,无缓冲的stdio可能在病理上表现不佳,并且不允许您更改缓冲,除非在使用流之前第一次操作
如果您唯一关心的是能够进行格式化输出,那么新标准化的in-POSIX-2008(and)函数可能是您问题的更好解决方案。+1这似乎是一个非常好的答案(感谢dprintf,我知道它一定存在!)。任何人都可以打败它?如果你需要它们的任何地方都可以使用它们,那么很难打败
dprintf()
等等。