[英]Implementing commands history triggered by arrow up/down keys in C
我實現了自己的shell,該shell執行所有現有的UNIX命令和幾個自定義命令。 我需要做的是,以與UNIX終端完全相同的方式使用向上/向下箭頭鍵訪問先前的命令。
我發現我可以使用<curses.h>
庫的getch()方法。 即使我不知道如何使用該方法來期望鍵盤輸入無阻塞,但真正的問題是我需要編譯程序才能使用它,如下所示: gcc myShell.c -lcurses
我要做的可能是使用信號來監聽后台輸入,而不期望Enter
。 我還嘗試過fork()
創建另一個進程,該進程將負責等待箭頭鍵的輸入,然后使用getch()方法來捕獲鍵,但是它也不起作用。
由於我已經使用過read()
方法來讀取用戶插入的命令行。 此箭頭鍵輸入應完全獨立於現有輸入讀數。
Stackoverflow中的一些答案指出了<conio.h>
庫,該庫在UNIX中不存在,因此很遺憾取決於平台。
簡而言之,我需要在自己的shell中讀取背景中的向上/向下箭頭鍵,並且我必須獨立於該平台進行操作,而不必鍵入gcc myShell.c
其他gcc myShell.c
進行編譯。 還應在不按Enter
情況下將其捕獲。
如果關於我的問題的任何細節還不夠清楚,請讓我知道,以我能提供的更多細節進行解釋。
提前致謝!
這里的問題是您正在使用的終端,而不是您的程序。 例如,Windows命令提示符甚至會在將輸入發送到程序之前將其緩沖,因此沒有獨立於平台的方式來強制終端為您提供該數據。 我懷疑curses有一種依賴於平台的方式來關閉該緩沖,因此可以獲取角色。
有關更多詳細信息,請參見此問題的答案: 如何避免使用任何getchar()按下回車鍵
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.