gpt4 book ai didi

C stdio 无缓冲多路复用

转载 作者:行者123 更新时间:2023-12-02 02:18:48 27 4
gpt4 key购买 nike

我正在开发一个需要非常紧密地(无缓冲)传输二进制流的小程序。它必须依赖于 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com