C stdio 无缓冲多路复用

标签 c

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

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

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

最佳答案

虽然我不完全清楚它是否被标准认可,但使用 selectfileno(f)应该在实践中工作 f是无缓冲的。但请记住,无缓冲的 stdio 可能会在病态上表现不佳,并且不允许更改缓冲,除非是在使用流之前的第一个操作。

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

关于C stdio 无缓冲多路复用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9255572/

相关文章:

C - 创建文件时使用 "w+"模式

更改在 C 中循环的回调函数中的全局变量

c - 没有这样的文件或目录: Cygwin + Gcc

c - 如何使用 GNU C 预处理器预定义宏?

c - 当 pthread_attr_t 不为 NULL 时?

c - 使用Python返回指向已经存在的内存地址的指针

c - 泛型表达式的副作用

c - 为什么宽字符问题?

java - JNI_CreateJavaVM 在 64 位 C 中失败

通过 Unix 系统服务 (USS) 中的 Shell 在 z/OS 上编译 C 程序