2013-09-28 27 views
0

我試圖在Linux中編寫程序來讀取鍵盤上的每個輸入,但使用STDIN_FILENO它只讀取在終端中輸入的輸入。我想要的是在執行過程中,即使終端關閉,也應該讀取鍵盤。即使終端關閉,如何從STDIN_FILENO讀取?

+0

你的意思是像一個鍵盤記錄?你需要掛鉤鍵盤驅動和/或調度器(至少這是如何在Windows上完成的,我想它在Linux上是相似的)。通常應用程序只捕獲指向他們自己的窗口或終端的按鍵。 – Thomas

+0

您是否正在討論窗口系統中的一個進程,該窗口能夠讀取所有窗口中的所有鍵盤筆畫?做到這一點並不容易 - 你必須在X11系統內的適當位置才能做到這一點。實際上,系統會盡量確保窗口1中的進程無法讀取發送到窗口2的字符。當終端關閉時,通過從標準輸入(STDIN_FILENO)中讀取,您可能意味着什麼。也許我誤解了你的意圖。請解釋。 –

回答

1

STDIN_FILENO只是一個幫手宏。

從標準輸入您收到傳遞給你的程序的字節流,他們犯規neccessary來自終端 - 也可以從文件等,這不是捕捉鍵盤。終端捕捉鍵盤,然後將輸入的數據傳遞給程序的stdin。

爲了捕獲鍵盤,您需要一些接收事件的其他方法。我猜你正在運行GUI又名X服務器;通常,應用程序創建窗口並接收與它們相關的事件。爲了捕捉所有的鍵盤事件,你將不得不更加低級。看看xlib這對你來說應該是足夠的,儘管它可能不是。