当stdin设置为C中的文件时,如何从键盘读取

我觉得这很简单,但显然不适合我!

我有一个控制台应用程序.我需要从键盘读取输入,但stdin已被重定向到文件.那么如何创建一个指向键盘流的FILE-Handle,我可以将其用于fgets等?

我发现ttyname(0)似乎是我在POSIX环境中寻找的东西,我在这里没有.我在使用标准Visual Studio编译器的Windows系统中.

有任何想法吗?先感谢您.

最佳答案 没有简单/可移植的方式来判断键盘是否存在(您的应用程序可能是从终端仿真器从串行端口,telnet会话或其他任何东西运行).如果键盘确实存在(包括触摸屏上的键盘图片),那么你无法真正告诉键盘在到达你的应用程序之前需要通过多少层软件(例如击键可能来自一个键盘驱动程序到输入法编辑器到GUI到shell到你的应用程序).这意味着尝试直接从键盘驱动程序或某些东西获取击键是一个坏主意,几乎在所有情况下都会失败.

解决问题的最佳方法是找出导致STDIN首先被重定向的设计失败系列.

例如;也许应用程序应该有一个命令行选项来读取文件中的一些数据;这样应用程序可以从文件中获取一些数据,一些来自STDIN(如果命令行选项不存在,则从STDIN获取所有数据).

点赞