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