通过ioctl命令EVIOCGNAME,能获取dev/input/event*对应的Device Name。 实例: #include <fcntl.h> #include <stdio.h> #include <unistd.h> #include <string.h> #include <dirent.h> #include <linux/input.h> int main(int argc, char *argv[]) { const char *dirname = "/dev/input"; char devname[4096]; char *filename; int fd; DIR *dir; struct dirent *de; dir = opendir(dirname); strcpy(devname,dirname); //printf("devname=%s/n",devname); filename = devname + strlen(devname); *filename++ = '/'; while((de = readdir(dir))){ if(de->d_name[0]=='.'&&de->d_name[1]=='/0'||de->d_name[1]=='.'&&de->d_name[2]=='/0') continue; //printf("d_name=%s/n",de->d_name); strcpy(filename,de->d_name); fd = open(devname,O_RDONLY); if(fd > 0){ char name[80] = "Unknown"; if(ioctl(fd, EVIOCGNAME(sizeof(name)),name) < 0){ //printf("can't get device name/n"); }else{ printf("devname=%s/n",devname); printf("name=%s/n",name); } } } return 0; }