gpt4 book ai didi

c - 如何禁用 fread() 中的缓冲?

转载 作者:太空狗 更新时间:2023-10-29 17:19:22 26 4
gpt4 key购买 nike

我正在使用 fread() 和 fwrite() 读取和写入套接字。我相信这些函数是用于缓冲输入和输出的。有什么方法可以在仍然使用这些功能的同时禁用缓冲吗?

编辑:

我正在构建一个远程桌面应用程序,远程客户端似乎“有点落后于服务器”,我不知道可能是什么原因......我认为这可能是因为缓冲读取和写 .. 但使用 setvbuf 没有用。

我所说的“滞后”是指远程桌面客户端比服务器晚运行几秒钟。服务器在特定时刻正在做的事情会在大约 15-20 秒的延迟后反射(reflect)在客户端。

此外,我不想不使用 fread(),因为它是现有代码的一部分。我不想修改它。我最终可以使用 write() 和 read(),但我想避免使用它。

最佳答案

您可以使用 setvbuf 来禁用特定文件指针的缓冲:

setvbuf(fp, NULL, _IONBF, 0);

编辑

正如史蒂文斯所警告的那样,混合使用标准输入的套接字有点棘手。这里有一些引述。

The problem problem with these latter three functions [fseek, fsetpos, rewing] is that they all call lseek, which fails on a socket.

The easiest way to handle this read-write problem is to open two standard I/O streams for a given socket: one for reading and one for writing.

One way around this [buffering problem] is to force the output stream to be line buffered by calling setvbuf. Another is to force each echoed line to be output by calling fflush after each call to fputs. But in practice, either of these solutions is still error-prone and may interact badly with the Nagle algorithm


总结:

尝试停止使用 stdio使用stdiofreadfwrite 是没有意义的。直接使用 readwrite 代替。史蒂文斯谈到“行缓冲”输出是因为人们将 fgetsfputs 与 stdio 一起使用

关于c - 如何禁用 fread() 中的缓冲?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8699397/

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