实现由C中的向上/向下箭头键触发的命令历史记录

时间:2017-12-03 14:33:22

标签: c linux shell unix terminal

我已经实现了自己的shell,它执行所有现有的UNIX命令和几个自定义命令。我需要做的是,通过使用向上/向下键的方式来访问以前的命令,就像UNIX终端一样。

我发现我可以使用<curses.h>库的getch()方法。即使我无法弄清楚如何使用该方法来期望非阻塞键盘输入,真正的问题是我需要编译程序以便能够使用它如下:gcc myShell.c -lcurses

我要做的就是使用信号来监听背景输入,而不要期待Enter输入。我还尝试fork()创建另一个进程,负责等待箭头键输入,然后使用getch()方法来捕获密钥,但它也不起作用。

因为我已经使用read()方法来读取用户插入的命令行。此箭头键输入应完全独立于现有输入读数。

Stackoverflow中的一些答案指向UNIX中不存在的<conio.h>库,因此遗憾的是平台依赖。

简要总结一下,我需要在自己的shell中阅读后台的向上/向下箭头键,我必须独立完成该平台,而不必键入{{1用于编译。它也应该在没有gcc myShell.c按下的情况下被捕获。

如果有关我的问题的任何细节不够明确,请让我知道尽可能详细解释。

提前致谢!

1 个答案:

答案 0 :(得分:2)

这里的问题在于您使用的终端,而不是您的程序。例如,Windows命令提示符会在将输入发送到您的程序之前缓冲输入,因此没有与平台无关的方法来强制终端为您提供该数据。我怀疑curses有一种依赖于平台的方式来关闭缓冲,从而可以获得角色。

有关详细信息,请参阅此问题的答案:How to avoid press enter with any getchar()