我遇到以下問題。我想在Linux終端中執行某些操作,直到調用組合鍵CTRL + D。我發現了一個Windows的C++庫函數,可以做到這一點,但對於Linux來說卻不是一個簡單的解決方案。代碼骨架將是這樣的:在while循環中執行操作,直到調用組合鍵爲止C++
while(!invoked){ //Until CTRL+D is pressed
//Do something
}
//Continue when CTRL+D is invoked
這可能嗎?
我遇到以下問題。我想在Linux終端中執行某些操作,直到調用組合鍵CTRL + D。我發現了一個Windows的C++庫函數,可以做到這一點,但對於Linux來說卻不是一個簡單的解決方案。代碼骨架將是這樣的:在while循環中執行操作,直到調用組合鍵爲止C++
while(!invoked){ //Until CTRL+D is pressed
//Do something
}
//Continue when CTRL+D is invoked
這可能嗎?
此中斷週期當組合`CRTL + d」插入:在Linux中
while ((c = getchar()) != EOF)
注是CRTL-D
代表EOF。它相當於windows中的CTRL-Z
。
如果用戶沒有輸入任何內容,會發生什麼情況? –
應用程序在'getchar()'函數中被阻塞,等待輸入。我明白你的意思了:D!問題在於'getchar'函數調用BLOCKING'read'系統調用。這可以通過使'read'不阻塞並正確處理錯誤'EAGAIN'和'EWOULDBLOCK'來解決。 說實話,我從來沒有試過'STDIN',但它應該工作! –
使用來自(n)curses庫的getch。正如zaufi已經解釋的那樣,當從標準輸入讀取時檢查EOF
,例如, getchar
,就像檢查Ctrl-D
,但它是一個阻止操作。 getch
是非阻塞的(在nodelay
模式下),因此比較適合諸如遊戲之類的東西。
到等待最簡單的方式爲Ctrl+D
是從std::cin
閱讀不便,然後在流檢查EOF
。 問題是:這個調用會阻塞。因此做的行爲應該發生在的其他一些線程中。那麼,你必須發信號(例如通過條件變量)工作線程從服務員...
我不知道CTRL + D產生一個信號..? – Nbr44
失敗,它是EOF。我的錯。 – orlp
你是在談論「直到按下CTRL-D纔讀取一些輸入」,或者「繪製數字和播放音樂」類型的「做某事」。關於Giueseppe Pes解決方案是否正確,我們應該區分一下,或者我們應該走另一條路。 –