我有一個用C編寫的非常簡單的TCP服務器。它無限期地運行,等待連接。在Windows中,我使用select
檢查活動在插座上,如果沒有任何,我有以下的代碼讓我通過按鍵盤上的「Q」退出:如何在不阻塞的情況下在unix控制檯應用程序中捕獲單個按鍵?
if(kbhit()) {
char c = getch();
if(c == 'q') break;
}
這並未't在unix上工作,因爲kbhit
不存在,getch
的工作方式不同。我發現一些sample code使用tcsetattr
來更改終端設置並允許逐個字符的輸入。在調用init函數之後,我打開/ dev/stdin(使用O_NONBLOCK
)並讀取一個字符,但是read(f, &c, 1)
會阻塞,直到遇到一個字符。
我想我可以產生一個單獨的線程,並有它無限期地等待,然後發出第一個線程,如果用戶點擊'q',但這似乎有點笨重。當然有更簡單的方法?
即使我的應用程序還沒有使用select,這也會起作用。我使用select的事實已經非常容易,它的作用就像一個魅力。謝謝 – 2008-10-08 21:45:52