2013-08-05 21 views
0

我遇到以下問題。我想在Linux終端中執行某些操作,直到調用組合鍵CTRL + D。我發現了一個Windows的C++庫函數,可以做到這一點,但對於Linux來說卻不是一個簡單的解決方案。代碼骨架將是這樣的:在while循環中執行操作,直到調用組合鍵爲止C++

while(!invoked){ //Until CTRL+D is pressed 
//Do something 
} 
//Continue when CTRL+D is invoked 

這可能嗎?

+0

我不知道CTRL + D產生一個信號..? – Nbr44

+0

失敗,它是EOF。我的錯。 – orlp

+0

你是在談論「直到按下CTRL-D纔讀取一些輸入」,或者「繪製數字和播放音樂」類型的「做某事」。關於Giueseppe Pes解決方案是否正確,我們應該區分一下,或者我們應該走另一條路。 –

回答

2

此中斷週期當組合`CRTL + d」插入:在Linux中

while ((c = getchar()) != EOF) 

注是CRTL-D代表EOF。它相當於windows中的CTRL-Z

+0

如果用戶沒有輸入任何內容,會發生什麼情況? –

+0

應用程序在'getchar()'函數中被阻塞,等待輸入。我明白你的意思了:D!問題在於'getchar'函數調用BLOCKING'read'系統調用。這可以通過使'read'不阻塞並正確處理錯誤'EAGAIN'和'EWOULDBLOCK'來解決。 說實話,我從來沒有試過'STDIN',但它應該工作! –

0

使用來自(n)curses庫的getch。正如zaufi已經解釋的那樣,當從標準輸入讀取時檢查EOF,例如, getchar,就像檢查Ctrl-D,但它是一個阻止操作。 getch是非阻塞的(在nodelay模式下),因此比較適合諸如遊戲之類的東西。

1

等待最簡單的方式爲Ctrl+D是從std::cin閱讀不便,然後在流檢查EOF。 問題是:這個調用會阻塞。因此做的行爲應該發生在的其他一些線程中。那麼,你必須發信號(例如通過條件變量)工作線程從服務員...