4

我认为这很简单,但显然不适合我!

我有一个控制台应用程序。我需要从键盘读取输入,但stdin已被重定向到一个文件。那么如何创建一个指向键盘流的文件句柄,我可以使用它fgets等等?

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

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

4

2 回答 2

1

摆脱 DOS 编程的黑暗日子:尝试打开“CON:”(控制台),这是一个保留字。希望它会在 Windows 中以相同的方式打开。冒号可能需要也可能不需要。“dir >con:”和“dir >con”在命令提示符下仍然有效。

此外,请务必在输出句柄上使用 setbuf() 系列中的某些内容以避免缓冲......它不应该缓冲终端 I/O,但确保它永远不会受到伤害。

同样,不确定,但我怀疑FILE *conin, *conout如果您似乎在一个句柄同时进行输入和输出时遇到问题,则打开单独的输出和输入可能会有所帮助。

于 2012-10-05T10:14:07.467 回答
1

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

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

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

于 2012-10-05T13:15:23.920 回答