对于一些输入设备,尤其是热插拔的USB设备,其会自动生成或者关联设备节点--/dev/input/eventX(X = 0,1,2,...),这时候,我们需要找到我们要操作的目标设备节点,下面是一个示例,可以根据输入设备的name域判断.如下:
/*
Function:
This Demo Is To Detect What The Input Types Is--Base on The Input-Name.
Author:
SE7EN
Date:
2014-2-14
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include <dirent.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <sys/inotify.h>
#include <unistd.h>
#include <sys/poll.h>
#include <linux/input.h>
#include <errno.h>
static int open_input_event(const char *inputpath,int flags)
{
return open(inputpath,flags);
}
static void close_input_event(int inputfd)
{
close(inputfd);
}
static int get_inputevent_name(int inputfd,char *event_name,int len)
{
int ret = -1;
ret = ioctl(inputfd,EVIOCGNAME(len - 1 ),event_name);
if(ret < 0)
perror("Get Event Name Fail:");
else
printf("You Are So Lucky.\n");
return ret;
}
int main(int argc,char **argv)
{
char event_name[100] = {'\0'};
int inputfd = -1,ret = -1;
if(argc != 2)
{
printf("Pls Input EventPath,Such As /dev/input/event0/1/2\n");
exit(1);//return -1;
}
inputfd = open_input_event(argv[1],O_RDONLY);
if(inputfd < 0)
{
perror("Open Input Event Fail:");
exit(1);
}
ret = get_inputevent_name(inputfd,event_name,sizeof(event_name));
if(ret < 0)
exit(1);
printf("%s named %s\n",argv[1],event_name);
close_input_event(inputfd);
return 0;
}
可以直接GCC编译,运行如下:
You Are So Lucky.
/dev/input/event0 named Lid Switch