C++确保绝对没有标准输入缓冲

C++ making sure there is absolutely no stdin buffering

本文关键字:标准输入 缓冲 确保 C++      更新时间:2023-10-16

在C++中,标准输入是否有可能绝对没有缓冲?

在 Linux 中,您必须首先将您使用的终端置于非规范模式,方法是拧紧termiosncurses库。

在Windows中,您需要我们 仅限Windows conio.h

是否有可能只使用标准C++来制作一个简单的跨平台语句,以确保标准输入中发生的一切都是实时发生的,并且可以由我的程序实时访问?

这意味着:不等待回车符或换行符来解析输入,根本不尝试处理转义字符,抛出不可打印字符的拟合等。

我需要这样的东西:

setvbuf(stdin, NULL, _IONBF, 0);

但无论如何,终端都会等待换行符或回车。

没有

外部库真的没有办法获得绝对原始的键盘输入吗?

如果有人能为此为我提供某种内联组装或原始C++解决方案,那就太好了。

不,不可能只使用标准的 C/C++ 代码来解决问题的简单跨平台语句。 这是因为您不仅关心程序内的缓冲,还关心程序的运行时环境(包括操作系统)完成的缓冲。 根据环境的不同,您的程序可能只是缺乏执行此操作的能力!

具体来说,我认为 C 和 C++ 标准库没有这样的功能。 我希望这样做有充分的理由:I/O 设施的细节在操作系统之间差异如此之大,目前尚不清楚您将如何以定义明确、可实现的方式指定这样的要求。

请注意,缓冲是可以在任何阶段添加的东西。 这是文件系统更通用的 I/O 的问题:在什么时候可以确定文件写入已推送到磁盘? 即使您发出操作系统命令来sync文件系统,也取决于存储设备中的固件是否及时刷新其缓冲区......