在终端操作的时候经常会用到一些shell命令,以getevent为例子看了下这些命令都是什么东西。
首先在网上了解了下getevent命令:http://blog.csdn.net/neiloid/article/details/7893755
根据文章中说的,在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,top这些命令就是一些system/core/toolbox中实现的工具程序,有兴趣的话,可以自己写一些shell工具放在这里了。