2013-04-05 58 views
1

我想在用戶按下某個鍵時調用一個函數,有點像使用Ctrl-C發送信號。這個想法是做一些事情,在一個while循環中說,並積極傾聽,例如,按下'f'鍵。當它被按下時,程序將停止執行循環並執行其他操作,因爲按下了'f'鍵。如何即時反應按鍵在C?

有沒有辦法自定義信號映射?我沒有太多運氣。似乎還有1或2個可用的定製信號,但我需要3.

如果我使用getchar(),用戶需要按'f'鍵然後按回車鍵。我希望他們只需按下'f'鍵而不必按下回車鍵。

這與使用unix的more程序非常相似,用戶只需按空格鍵即可瀏覽頁面。

任何幫助,非常感謝!

+0

Windows有鉤子的概念。我不知道Unix有什麼,但這可能會幫助你找到你想要的。 – chris 2013-04-05 04:33:10

+0

是的,我正在Unix上尋找它。 – user1472747 2013-04-05 04:35:49

+0

看起來你有ncurses或[this](http://cc.byexamples。COM/2007/04/08 /非阻塞用戶輸入在環 - 無需-ncurses的/)。作爲參考:http://stackoverflow.com/questions/3392291/c-monitor-for-keyboard-input – chris 2013-04-05 04:38:30

回答

2

如果由於某種原因你不喜歡ncurses,你可以嘗試如下所示。

可以使用其使用select()stdin然後對stdin一個read()並解析用戶輸入一個單獨的線程;如果密鑰是您正在尋找的內容,則向主線程發送一個信號(即USER1USER2未使用)。在您的信號處理程序中,執行您希望在中斷上執行的任何操作。請注意,這樣做意味着您的代碼必須是可中斷的,因此中斷不會破壞您的計算。

2

到目前爲止,最簡單的選擇是使用ncurses

然而,如果這是不能接受的,POSIX(因此Linux的太)定義了一系列例程關於 '終端控制' 的 - 名稱開始tc和包括:

在這種情況下,你基本上需要tcgetattr()tcsetattr()。您需要研究tcgetattr()tcsetattr()的定義中的限制,並且需要研究<termios.h>標頭中的結構和標誌。例如,請查看ICANON本地模式:您可能希望關閉該模式,以便字符在鍵入後立即可用。

相關問題