c inotify не всегда вызывающее событие для конкретного файла - PullRequest
0 голосов
/ 15 мая 2018
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.

Спасибо всем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...