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