在Linux中捕获input

首先,是的,我知道这个问题 ,但我正在寻找更多的信息。 实际上,我有一个相当类似的问题,那就是我需要能够捕获鼠标/键盘/操纵杆的input,并且我还想尽可能避免使用SDL。 我或多或less想知道是否有人知道在哪里可以得到一些体面的底漆处理来自Linux设备的input,甚至可能是一些教程。 SDL非常适合跨平台的input处理,但是我不打算在SDL中使用任何其他function,所以我想完全删除它。 build议,意见和帮助都表示赞赏。 谢谢!

编辑清晰度:

重点是捕捉鼠标移动,键盘按下/释放,鼠标点击,并可能游戏操纵杆处理。

使用下面的链接看看函数void kGUISystemX :: Loop(void)

这是我的主循环,通过键盘和鼠标在Linux上使用X Windows获得输入。

http://code.google.com/p/kgui/source/browse/trunk/kguilinux.cpp

这是一个片段:

if(XPending(m_display)) { XNextEvent(m_display, &m_e); switch(m_e.type) { case MotionNotify: m_mousex=m_e.xmotion.x; m_mousey=m_e.xmotion.y; break; case ButtonPress: switch(m_e.xbutton.button) { case Button1: m_mouseleft=true; break; case Button3: m_mouseright=true; break; case Button4:/* middle mouse wheel moved */ m_mousewheel=1; break; case Button5:/* middle mouse wheel moved */ m_mousewheel=-1; break; } break; case ButtonRelease: switch(m_e.xbutton.button) { case Button1: m_mouseleft=false; break; case Button3: m_mouseright=false; break; } break; case KeyPress: { XKeyEvent *ke; int ks; int key; ke=&m_e.xkey; kGUI::SetKeyShift((ke->state&ShiftMask)!=0); kGUI::SetKeyControl((ke->state&ControlMask)!=0); ks=XLookupKeysym(ke,(ke->state&ShiftMask)?1:0); ...... 

如果你知道你的项目只能在Linux下运行(不是Windows甚至BSD中的一个),你应该看看Linux内核的输入系统。 下载内核源代码并阅读Documentation/input/input.txt ,特别是evdev系统的描述。

对于更高级别(更便携)的解决方案,请阅读Xlib 。 显然它需要一个运行的X服务器,但它具有继承用户的键盘设置的优势。 游戏杆事件不幸的是不包括在内,你可能需要使用内核游戏杆API。

您可以先阅读本教程表格Linux文档项目

你没有说明你的应用程序的目的,但从输入设备读取原始数据很少你想要的,除非你只是为了好玩(或学校项目或其他)

如果您正在编写GUI应用程序(在X11图形环境中运行的应用程序),则可以依赖图形工具包(或原始X)输入驱动程序。

如果你正在编写一个文本模式的客户端,那么readline甚至ncurses都是不错的选择。

您可以从/ dev / input中的文件获得直接输入。 这是最简单的方法,你不需要任何额外的软件。