我认为这很简单,但显然不适合我!
我有一个控制台应用程序。我需要从键盘读取输入,但stdin
已被重定向到文件。那么如何创建一个指向键盘流的FILE-Handle,我可以使用fgets
等?
我发现ttyname(0)
似乎是我在POSIX环境中寻找的,我在这里没有。我在使用标准Visual Studio编译器的Windows系统中。
有什么想法吗?提前谢谢。
答案 0 :(得分:1)
从DOS编程的暗淡日子拉出来:尝试打开“CON:”(控制台),一个保留字。希望它在Windows中以相同的方式打开。结肠可能需要也可能不需要。 “dir> con:”和“dir> con”都可以在命令提示符下工作。
另外,请务必在输出句柄上使用setbuf()系列中的某些内容以避免缓冲...它不应该缓冲终端I / O,但确保它永远不会受到伤害。
同样,不确定,但我怀疑为输出打开单独的FILE *conin, *conout
,如果你似乎有一个句柄同时输入和输出的麻烦,那么输入一个可能会有所帮助。
答案 1 :(得分:1)
没有简单/可移植的方式来判断键盘是否存在(您的应用程序可能是从终端仿真器从串行端口,telnet会话或其他任何东西运行)。如果键盘确实存在(包括触摸屏上的键盘图片),那么你无法真正告诉键盘在到达你的应用程序之前需要通过多少层软件(例如击键可能来自一个键盘驱动程序到输入法编辑器到GUI到shell到你的应用程序)。这意味着尝试直接从键盘驱动程序或某些东西获取击键是一个坏主意,几乎在所有情况下都会失败。
解决问题的最佳方法是找出导致STDIN被重定向到哪一系列设计失败。
例如;也许应用程序应该有一个命令行选项来读取文件中的一些数据;这样应用程序可以从文件中获取一些数据,从STDIN获取一些数据(如果命令行选项不存在,则从STDIN获取所有数据)。