getEvent命令的实现

在终端操作的时候经常会用到一些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指令实际获取事件的是:pollres = poll(ufds, nfds, -1);这个poll函数可以在poll.h中找到


可知getevent,top这些命令就是一些system/core/toolbox中实现的工具程序,有兴趣的话,可以自己写一些shell工具放在这里了。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值