#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <linux/input.h>
#include <string.h>
#include <poll.h>
int main(int argc, char **argv)
{
int fd;
int len;
int ret;
struct input_event event;
struct pollfd fds[1];
nfds_t nfds = 1;
if(argc != 2)
{
printf("Usage: %s <dev>\n",argv[0]);
return -1;
}
/*设为noblock 可以一次事件读多次信息*/
fd = open(argv[1],O_RDWR | O_NONBLOCK);
if (fd < 0)
{
printf("open %s err\n", argv[1]);
return -1;
}
while(1)
{
fds[0].fd = fd;
fds[0].events = POLLIN;//读数据
fds[0].revents = 0;
ret = poll(fds,nfds,3000);//超时时间3000ms
if(ret > 0)
{
if(fds[0].revents == POLLIN)
{
while(read(fd,&event,sizeof(event)) == sizeof(event))
{
printf("get event: type = 0x%x, code = 0x%x, value = 0x%x \n",event.type,event.code,event.value);
}
}
}
else if(ret == 0)
{
printf("time out\n");
}
else
{
printf("poll error!\n");
}
}
close(fd);
return 0;
}
运行结果
[root@100ask:/mnt]# ./input_poll /dev/input/event2
time out
time out
time out
time out
按下按键之后:
get event: type = 0x1, code = 0x3, value = 0x1
get event: type = 0x0, code = 0x0, value = 0x0
get event: type = 0x1, code = 0x3, value = 0x0
get event: type = 0x0, code = 0x0, value = 0x0