Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 标准无缓冲多路复用_C - Fatal编程技术网

C 标准无缓冲多路复用

C 标准无缓冲多路复用,c,C,我正在开发一个小程序,它需要非常紧密地传输二进制流(无缓冲)。它必须依赖于select()多路复用,并且永远不允许“保留现有输入,除非有更多输入到达,因为它还不值得” 可以使用系统调用,但为了方便起见,我想使用stdio(也涉及字符串格式) 只要使用无缓冲的stdio,我就可以在流的底层文件描述符上安全地使用select()?如果不是,我如何确定一个文件流不会从集合中阻塞 除了char by char函数(getchar()和friends)之外,是否有任何调用将所有输入从libc传输到应用程

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

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

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

虽然我不完全清楚它是否受到标准的认可,但在
fileno(f)
上使用
select
实际上应该在
f
未缓冲时起作用。但是请记住,无缓冲的stdio可能在病理上表现不佳,并且不允许您更改缓冲,除非在使用流之前第一次操作


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

+1这似乎是一个非常好的答案(感谢dprintf,我知道它一定存在!)。任何人都可以打败它?如果你需要它们的任何地方都可以使用它们,那么很难打败
dprintf()
等等。