转自:https://blog.csdn.net/qq_21792169/article/details/51458855

当我们在Linux操作系统下使用input子系统时,当我们先插鼠标,在插上摄像头与先插摄像头,在插鼠标,操作系统为两个设备分配的event号不是固定的,先插上的是event0,后插上的是event1 。那么问题来了,我们写应用程序,我们怎么知道那个设备对应那个event接口,我们不可能认为指定使用那个接口,因为有时候插播顺序并不一致,下面我用代码来获取event接口。
 
使用cat /proc/bus/input/devices  
 
I: Bus=0011 Vendor=0001 Product=0001 Version=ab41
N: Name="AT Translated Set 2 keyboard"
P: Phys=isa0060/serio0/input0
S: Sysfs=/devices/platform/i8042/serio0/input/input2
U: Uniq=
H: Handlers=kbd event2 
B: EV=120013
B: KEY=4 2000000 3803078 f800d001 feffffdf ffefffff ffffffff fffffffe
B: MSC=10
B: LED=7

I: Bus=0011 Vendor=0002 Product=0005 Version=0000
N: Name="ImPS/2 Generic Wheel Mouse"
P: Phys=isa0060/serio1/input0
S: Sysfs=/devices/platform/i8042/serio1/input/input3
U: Uniq=
H: Handlers=mouse1 event3 
B: EV=7
B: KEY=70000 0 0 0 0 0 0 0 0
B: REL=103

 
主要观察打印信息,Name项是不一样的,我们就可以从这里下手,读取到这个名字,然后在这一类中读取event的值。
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <sys/types.h>
  4. #include <sys/stat.h>
  5. #include <unistd.h>
  6. #include <string.h>
  7. #include <sys/mman.h>
  8. //#define DBG_PRINTF(...)
  9. #define DBG_PRINTF printf
  10. char *command="cat /proc/bus/input/devices > log.txt" ;
  11. char *file_path="./log.txt";
  12. char  *file_buff;
  13. int number;
  14. int find_event()
  15. {
  16. int iFd;
  17. FILE *tFp;
  18. struct stat tStat;
  19. char *sub_buff="Handlers=mouse1";
  20. /* according  to mouse name find event number*/
  21. char *buff;
  22. tFp=fopen(file_path,"r+");    /* check if have log.txt file */
  23. if(NULL!=tFp)
  24. {
  25. fclose(tFp);
  26. system("rm log.txt");
  27. }
  28. system(command);
  29. /* 打开文件 */
  30. tFp = fopen(file_path, "r+");
  31. if (tFp == NULL)
  32. {
  33. DBG_PRINTF("can't open %s\n", file_path);
  34. return -1;
  35. }
  36. iFd = fileno(tFp);
  37. fstat(iFd, &tStat);
  38. /* mmap the file to mem */
  39. file_buff = (unsigned char *)mmap(NULL , tStat.st_size, PROT_READ | PROT_WRITE, MAP_SHARED, iFd, 0);
  40. if (file_buff== (unsigned char *)-1)
  41. {
  42. DBG_PRINTF("mmap error!\n");
  43. return -1;
  44. }
  45. buff=strstr(file_buff,sub_buff);/* in the mem file_buff  find sub_buff name */
  46. if(NULL==buff)
  47. {
  48. DBG_PRINTF("can't find %s\n",sub_buff);
  49. munmap(file_buff, tStat.st_size);
  50. return -1;
  51. }
  52. number=*(buff+strlen(sub_buff)+6);/* 6== event */
  53. munmap(file_buff, tStat.st_size);
  54. fclose(tFp);
  55. return  0;
  56. }
  57. int main(int argc, char **argv)
  58. {
  59. find_event();
  60. DBG_PRINTF("event%d\n",number-'0');
  61. return 0;
  62. }
遇到同样的问题我们可以采取同样的措施,先映射到内存上,再来查找。也可以直接使用fopen打开文件,然后使用fgets函数来读取到buf中,在使用strstr来查找。
 

查看CPU信息:cat /proc/cpuinfo  
  
查看内存信息:cat /proc/meminfo  
  
查看USB设备:cat /proc/bus/usb/devices  
  
查看键盘和鼠标:cat /proc/bus/input/devices  
  
查看各分区使用情况:df  
查看体系结构:busybox uname -a  
  
查看中断信息:cat /proc/interrupts

Linux获取/dev/input目录下的event对应的设备【转】的更多相关文章

  1. Linux如何查看与/dev/input目录下的event对应的设备

    1.查看当前的设备 dev/input/ 2.查看设备的名称 cat /proc/bus/input/devices

  2. [转帖]Linux系统/dev/mapper目录浅谈

    Linux系统/dev/mapper目录浅谈   Linux系统的一般的文件系统名称类似于/dev/sda1或/dev/hda1,但是今天在进行系统维护的时候,利用df -h 命令敲出了/dev/ma ...

  3. Linux编译Windows共享目录下代码

    Linux编译Windows共享目录下代码(金庆的专栏)万神服务器代码是跨平台的.平时策划在Windows上开自己的服务器测试,测试和发布服务器为Linux.开发时,先在Windows上编译测试,再到 ...

  4. Linux查找和替换目录下所有文件中字符串(转载)

    转自:http://rubyer.me/blog/1613/ 单个文件中查找替换很简单,就不说了.文件夹下所有文件中字符串的查找替换就要记忆了,最近部署几十台linux服务器,记录下总结. 查找文件夹 ...

  5. java获取ubuntu某个目录下的所有文件信息

    java获取ubuntu某个目录下的所有文件信息 public List<VCFile> getAllFiles(String basicDirName) { List<VCFile ...

  6. linux c++ 遍历一个目录下的文件名 (包括子目录的文件名)

    最近写代码有一个要遍历目录下的每一个文件并取得这个文件的绝对路径的需求, 我们知道linux c++中有system命令所以我在代码中 先生成了一个log,然后去读log文件的每一行文件名,然后给存储 ...

  7. Linux系统/dev/mapper目录浅谈

    Linux系统的一般的文件系统名称类似于/dev/sda1或/dev/hda1,但是今天在进行系统维护的时候,利用df -h 命令敲出了/dev/mapper/VolGroup-lv_root和/de ...

  8. linux怎么实时查看目录下是否有文件生成

    inotify-tools 是为linux下inotify文件监控工具提供的一套c的开发接口库函数,同时还提供了一系列的命令行工具,这些工具可以用来监控文件系统的事件. inotify-tools是用 ...

  9. linux系统/var/log目录下的信息详解

    一./var目录 /var 所有服务的登录的文件或错误信息文件(LOG FILES)都在/var/log下,此外,一些数据库如MySQL则在/var/lib下,还有,用户未读的邮件的默认存放地点为/v ...

随机推荐

  1. 第二次spring冲刺第1天

    今天,我们开会讨论了,觉得现阶段的四则运算还不够完善,功能也过于简单,没有太多能吸引人的地方,因次提出以下几点作为后续的修改: 1.计时器,如果具有计时功能,那么就可以增加趣味性. 2.页面跳转,现阶 ...

  2. [搜狐科技]由浅入深理解Raft协议

    由浅入深理解Raft协议 2017-10-16 12:12操作系统/设计 0 - Raft协议和Paxos的因缘 读过Raft论文<In Search of an Understandable ...

  3. Ubuntu中sublime和Foxit Reader不能使用中文输入法解决方案

    虽然Ubuntu下面很多软件同windows下一样,但是经常会出现各种各样的小问题,其中最让人头疼的是软件中的输入法问题. sublime作为一个跨平台的编辑软件,可以支持win,linux和mac系 ...

  4. 通信对象 System.ServiceModel.Channels.ServiceChannel 无法用于通信,因为其处于“出错”状态。

    通信对象 System.ServiceModel.Channels.ServiceChannel 无法用于通信,因为其处于“出错”状态. 在 System.ServiceModel.Channels. ...

  5. 【bzoj5073】[Lydsy1710月赛]小A的咒语 后缀数组+倍增RMQ+贪心+dp

    题目描述 给出 $A$ 串和 $B$ 串,从 $A$ 串中选出至多 $x$ 个互不重合的段,使得它们按照原顺序拼接后能够得到 $B$ 串.求是否可行.多组数据. $T\le 10$ ,$|A|,|B| ...

  6. 初征——NOIP2018游记

    前言 从最初接触oi到今年noip到来,也已经将近有一年了.从对于程序一窍不懂到现在开始学习算法,只是短短的不到一年的时间罢了.这次noip,不仅仅是我oi生涯的第一次noip,更是相当于是对我这一年 ...

  7. IDEA 调试技巧

    转载:http://blog.csdn.net/victor_cindy1/article/details/52336983 1.这里以一个web工程为例,点击图中按钮开始运行web工程. 2.设置断 ...

  8. mininet *** Error: RTNETLINK answers: No such file or directory 问题及解决方法

    一.问题 按照mininet官网中从源码安装步骤进行安装后,运行命令sudo mn --link tc,bw=10,提示说*** Error: RTNETLINK answers: No such f ...

  9. POJ 1087 A Plug for UNIX / HDU 1526 A Plug for UNIX / ZOJ 1157 A Plug for UNIX / UVA 753 A Plug for UNIX / UVAlive 5418 A Plug for UNIX / SCU 1671 A Plug for UNIX (网络流)

    POJ 1087 A Plug for UNIX / HDU 1526 A Plug for UNIX / ZOJ 1157 A Plug for UNIX / UVA 753 A Plug for ...

  10. Philosopher

    Description ​ 给你一个长度为\(n\)的序列\(a_i\)和\(m\)次操作,要支持两种操作: \(1\ l\ r\ flag\):将\([l,r]\)内的数排序,\(flag=1\)表 ...