我认为这很简单,但显然对我来说不是这样!我有一个控制台应用程序。我需要从键盘读取输入,但是stdin已被重定向到一个文件。那么我该如何创建一个指向键盘流的FILE-Handle,以便可以在fgets等函数中使用它?我发现在POSIX环境中,ttyname(0)似乎是我要找的内容,但我在这里没有它。我在一个带有标准Visual Studio编译器的Windows系统中。有任何想法吗?提前感谢您。
FILE *conin, *conout
句柄可能有助于解决一个句柄同时处理输入和输出的问题。很难/便携地判断键盘是否存在(您的应用程序可能是从串行端口、Telnet 会话或其他任何地方运行的终端仿真器)。如果实际上存在键盘(包括触摸屏上的键盘图片),那么您无法确定按键需要通过多少层软件才能到达您的应用程序(例如,按键可能从键盘驱动程序经过输入法编辑器、GUI、Shell 到达您的应用程序)。这意味着尝试直接从键盘驱动程序或其他东西获取按键是一个糟糕的想法,在几乎所有情况下都会失败。
解决问题的最佳方法是找出哪些设计失误导致 STDIN 首先被重定向。
例如:也许应用程序应该有一个命令行选项来从文件中读取一些数据;这样应用程序就可以从文件和 STDIN 中获取一些数据(如果命令行选项不存在,则从 STDIN 获取所有数据)。
fopen
或freopen
打开它。如果我有了那个路径,我就不需要重定向stdin
了。我可以只创建另一个键盘输入句柄,并独立使用文件和键盘输入。但还是谢谢你的建议。 - Sascha Leyer