您的位置:首页 > 其它

getEvent命令的实现

2015-07-01 22:49 351 查看
在终端操作的时候经常会用到一些shell命令,以getevent为例子看了下这些命令都是什么东西。

首先在网上了解了下getevent命令:/article/9017456.html

根据文章中说的,在system/core/toolbox/getevent.c中可以了解这个命令的实现,就找出来看了下

//getevent.c

while(1) {
pollres = poll(ufds, nfds, -1);
//printf("poll %d, returned %d\n", nfds, pollres);
if(ufds[0].revents & POLLIN) {
read_notify(device_path, ufds[0].fd, print_flags);
}
for(i = 1; i < nfds; i++) {
if(ufds[i].revents) {
if(ufds[i].revents & POLLIN) {
res = read(ufds[i].fd, &event, sizeof(event));
if(res < (int)sizeof(event)) {
fprintf(stderr, "could not get event\n");
return 1;
}
if(get_time) {
printf("[%8ld.ld] ", event.time.tv_sec, event.time.tv_usec);
}
if(print_device)
printf("%s: ", device_names[i]);
print_event(event.type, event.code, event.value, print_flags);
if(sync_rate && event.type == 0 && event.code == 0) {
int64_t now = event.time.tv_sec * 1000000LL + event.time.tv_usec;
if(last_sync_time)
printf(" rate %lld", 1000000LL / (now - last_sync_time));
last_sync_time = now;
}
printf("%s", newline);
if(event_count && --event_count == 0)
return 0;
}
}
}
}


在自己添加键值映射的时候,会发现有时候getevent -l得到的打印没能显示成字符串形式,而是十六进制数字的形式。

通过分析源码就能知道原因是没有在getevent.h中的表中的key_labels中也添加相应的字串。(添加后确实getevent -l打印出来的就是字符串形式了)

另外可以知到getevent指令实际获取事件的是:pollres = poll(ufds, nfds, -1);这个poll函数可以在poll.h中找到

可知getevent,top这些命令就是一些system/core/toolbox中实现的工具程序,有兴趣的话,可以自己写一些shell工具放在这里了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: