У меня есть биглая кость и вы хотите прочитать булавку gpio из моей программы. Файл либо содержит 1, либо 0 в любой момент. В моей программе C у меня есть цикл while, который работает вечно с функцией сна, чтобы он не был cpu hog всякий раз, когда этот вывод был низким (0) и когда он высок (1) он запускает код. Я считаю это очень расточительным для ресурсов. Есть ли способ, который я могу видеть, когда этот файл равен 1, а затем запустить код? Мне не нравится опрос, особенно когда биглевая кость будет заряжаться от батареи.Как искать изменения в файле без опроса?
0
A
ответ
0
Используйте механизм уведомления, например, используя libev.
Основная идея заключается в том, что обратный вызов вызывается, если доступны данные.
Если это не сработает, возможно, вам придется использовать другие API, чтобы попасть туда, например, inotify.
Пример любезно libev документы:
// a single header file is required
#include <ev.h>
#include <stdio.h> // for puts
// every watcher type has its own typedef'd struct
// with the name ev_TYPE
ev_io stdin_watcher;
ev_timer timeout_watcher;
// all watcher callbacks have a similar signature
// this callback is called when data is readable on stdin
static void
stdin_cb (EV_P_ ev_io *w, int revents)
{
puts ("stdin ready");
// for one-shot events, one must manually stop the watcher
// with its corresponding stop function.
ev_io_stop (EV_A_ w);
// this causes all nested ev_run's to stop iterating
ev_break (EV_A_ EVBREAK_ALL);
}
// another callback, this time for a time-out
static void
timeout_cb (EV_P_ ev_timer *w, int revents)
{
puts ("timeout");
// this causes the innermost ev_run to stop iterating
ev_break (EV_A_ EVBREAK_ONE);
}
int
main (void)
{
// use the default event loop unless you have special needs
struct ev_loop *loop = EV_DEFAULT;
// initialise an io watcher, then start it
// this one will watch for stdin to become readable
ev_io_init (&stdin_watcher, stdin_cb, /*STDIN_FILENO*/ 0, EV_READ);
ev_io_start (loop, &stdin_watcher);
// initialise a timer watcher, then start it
// simple non-repeating 5.5 second timeout
ev_timer_init (&timeout_watcher, timeout_cb, 5.5, 0.);
ev_timer_start (loop, &timeout_watcher);
// now wait for events to arrive
ev_run (loop, 0);
// break was called, so exit
return 0;
}
Смежные вопросы
- 1. искать изменения в файле
- 2. искать в сжатом файле
- 3. Как искать в файле JSON?
- 4. Подпишитесь на изменения в базе данных MySQL без опроса
- 5. udev монитор медленный без опроса
- 6. Как искать в файле в CLISP?
- 7. изменения опроса по рельсам с Railscasts пересмотренной
- 8. BASH: Искать только между разделителями в файле без использования «cut»
- 9. Обновление веб-страницы без опроса
- 10. Как программно искать текст в файле jar?
- 11. Как искать конкретную строку в файле?
- 12. Как искать «\ 0» в двоичном файле?
- 13. Delphi Как быстрее искать в двоичном файле?
- 14. как искать значения в файле и заменить
- 15. Как искать ключевое слово в файле php?
- 16. Как искать двоичную последовательность в файле
- 17. Как искать в XML-файле, используя php?
- 18. Как эффективно искать строки в файле?
- 19. Как искать/Grep определенное слово в файле?
- 20. Как анализировать и искать в файле minidump
- 21. андроид - Как искать в XML-файле
- 22. Ожидание нескольких событий без опроса
- 23. Как сохранить отслеживание изменений в Box api без длинного опроса
- 24. как искать последнее изменение в указанном файле на архитектуре git
- 25. Как отправлять сообщения клиентам без опроса?
- 26. Как заставить поток ждать без опроса?
- 27. опроса URL-адрес с SetTimeout без задержки первого опроса
- 28. Изменения в файле diff
- 29. Как получить уведомление gmail без опроса
- 30. Синхронизация с Linux без опроса