在C++中,标准输入是否有可能绝对没有缓冲?
在 Linux 中,您必须首先将您使用的终端置于非规范模式,方法是拧紧termios
或ncurses
库。
在Windows中,您需要我们 仅限Windows conio.h
。
是否有可能只使用标准C++来制作一个简单的跨平台语句,以确保标准输入中发生的一切都是实时发生的,并且可以由我的程序实时访问?
这意味着:不等待回车符或换行符来解析输入,根本不尝试处理转义字符,不抛出不可打印字符的拟合等。
我需要这样的东西:
setvbuf(stdin, NULL, _IONBF, 0);
但无论如何,终端都会等待换行符或回车。
没有外部库真的没有办法获得绝对原始的键盘输入吗?
如果有人能为此为我提供某种内联组装或原始C++解决方案,那就太好了。
不,不可能只使用标准的 C/C++ 代码来解决问题的简单跨平台语句。 这是因为您不仅关心程序内的缓冲,还关心程序的运行时环境(包括操作系统)完成的缓冲。 根据环境的不同,您的程序可能只是缺乏执行此操作的能力!
具体来说,我认为 C 和 C++ 标准库没有这样的功能。 我希望这样做有充分的理由:I/O 设施的细节在操作系统之间差异如此之大,目前尚不清楚您将如何以定义明确、可实现的方式指定这样的要求。
请注意,缓冲是可以在任何阶段添加的东西。 这是文件系统更通用的 I/O 的问题:在什么时候可以确定文件写入已推送到磁盘? 即使您发出操作系统命令来sync
文件系统,也取决于存储设备中的固件是否及时刷新其缓冲区......