我已经实现了自己的shell,它执行所有现有的UNIX命令和几个自定义命令。我需要做的是,通过使用向上/向下键的方式来访问以前的命令,就像UNIX终端一样。
我发现我可以使用<curses.h>
库的getch()方法。即使我无法弄清楚如何使用该方法来期望非阻塞键盘输入,真正的问题是我需要编译程序以便能够使用它如下:gcc myShell.c -lcurses
我要做的就是使用信号来监听背景输入,而不要期待Enter
输入。我还尝试fork()
创建另一个进程,负责等待箭头键输入,然后使用getch()方法来捕获密钥,但它也不起作用。
因为我已经使用read()
方法来读取用户插入的命令行。此箭头键输入应完全独立于现有输入读数。
Stackoverflow中的一些答案指向UNIX中不存在的<conio.h>
库,因此遗憾的是平台依赖。
简要总结一下,我需要在自己的shell中阅读后台的向上/向下箭头键,我必须独立完成该平台,而不必键入{{1用于编译。它也应该在没有gcc myShell.c
按下的情况下被捕获。
如果有关我的问题的任何细节不够明确,请让我知道尽可能详细解释。
提前致谢!
答案 0 :(得分:2)
这里的问题在于您使用的终端,而不是您的程序。例如,Windows命令提示符会在将输入发送到您的程序之前缓冲输入,因此没有与平台无关的方法来强制终端为您提供该数据。我怀疑curses有一种依赖于平台的方式来关闭缓冲,从而可以获得角色。
有关详细信息,请参阅此问题的答案:How to avoid press enter with any getchar()