Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C语言中实现由上下箭头键触发的命令历史_C_Linux_Shell_Unix_Terminal - Fatal编程技术网

在C语言中实现由上下箭头键触发的命令历史

在C语言中实现由上下箭头键触发的命令历史,c,linux,shell,unix,terminal,C,Linux,Shell,Unix,Terminal,我已经实现了我自己的shell,它执行所有现有的UNIX命令和几个自定义命令。我需要做的是,使用上/下箭头键访问以前的命令,就像UNIX终端那样 我发现我可以使用库的方法。即使我不知道如何使用该方法来期望非阻塞键盘输入,但真正的问题是我需要编译程序,以便能够按如下方式使用它:gcc myShell.c-lcurses 我要做的可能是使用一个信号来听背景输入,而不需要输入Enterinput。我还尝试了fork()来创建另一个进程,该进程将负责等待箭头键的输入,然后使用getch()方法来捕获键,

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

我发现我可以使用
库的方法。即使我不知道如何使用该方法来期望非阻塞键盘输入,但真正的问题是我需要编译程序,以便能够按如下方式使用它:
gcc myShell.c-lcurses

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

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

Stackoverflow中的一些答案指出了UNIX中不存在的
库,因此不幸的是依赖于平台

简而言之,我需要在我自己的shell中阅读背景中的上/下箭头键,并且我必须独立于平台进行操作,而不必键入除编译
gcc myShell.c
以外的内容。也应在不按Enter键的情况下捕获它

如果关于我的问题的任何细节不够清楚,请让我知道并尽可能详细地解释


提前谢谢

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


有关更多详细信息,请参阅此问题的答案:

欢迎任何满足上述要求的答案@jm666Real Linux Shell使用该库实现此目的,它们不实现自己的处理。好的,我知道它需要依赖于平台。您对UNIX捕获箭头键输入的合适解决方案建议是什么?请参阅我链接的问题,第一个答案有一种在UNIX中实现的方法。第二个答案有另一种方法。