int main(int argc, char* argv[]) {
char* p;
struct inotify_event *event;
int sd, gd, fd;
char buffer[BUF_LEN];
fd = inotify_init();
if( fd < 0) {
return 1;
}
gd = inotify_add_watch(fd, "/sys/devices/system/cpu/cpu2/cpufreq/interactive", IN_MODIFY);
sd = inotify_add_watch(fd, "/sys/class/graphics/fb0/show_blank_event", IN_MODIFY);
for(;;) {
read(fd, buffer, BUF_LEN); //Thread block here. Waits for event triggering
event = (struct inotify_event *) buffer; //Get the event
if(event->mask & IN_MODIFY) {
if(event->wd == sd) {
printf("Handle screen event\n");
//pthread_create(&handle_screen_event, NULL, handleScreenEvent, (void*)NULL);
}
if(event->wd == gd) {
printf("Handle gov event\n"); //This is not triggered after some time of being in standby (screen off) mode. Yet the screen event trigger is always fired
//pthread_create(&handle_gov_event, NULL, handleGovEvent, (void*)NULL);
}
}
}
return 0;
}
Итак, вот код. Я звоню inotify_add_watch()
, но через несколько минут с выключенным экраном «обрабатывать событие» никогда не запускается снова. «Обработка события экрана» всегда срабатывает. Я понятия не имею, почему он так себя ведет. Я добавил проверку для IN_IGNORE
, чтобы увидеть, удаляется ли файл, но он никогда не срабатывает. Я просто не понимаю, как работает один, а другой нет.
Я запускаю это на устройстве Android. Galaxy S7.
Спасибо всем.