关于筛选输入设备的设备节点

来源:互联网 发布:斗鱼盛典 知乎 编辑:程序博客网 时间:2024/04/30 08:12

    对于一些输入设备,尤其是热插拔的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:        SE7ENDate:        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


0 0