Как работать с серийными выводами при создании пользовательского gsource?

Я пытаюсь написать подкласс GSource для работы с событиями последовательного порта. Я нашел способ сделать это с помощью интерфейса терминала POSIX, который работает с файловыми дескрипторами. По какой-то причине основной цикл событий GLib имеет особый способ работы с этой переменной.

Как говорится в документация говорит, что есть две абстрактные функции GSource, которые используются для подготовки к отправке, одна для запуска перед пулом fds и одна после. Это показывает, что, вероятно, важно позволить GLib обрабатывать файловые дескрипторы, а не реализовывать это в моей собственной функции подготовки, но нет такого условия, как "изменение состояния вывода" для работы с выводами последовательного порта. По этому поводу у меня есть некоторые вопросы.

  1. Почему команда GLib выбрала библиотеку для обработки файлового дескриптора?

  2. Могу ли я получить какую-то проблему, если просто проигнорирую ее и реализую в своей собственной функции подготовки?


person Danilo Mendes    schedule 22.02.2017    source источник


Ответы (1)


  1. GSource должен обрабатывать файловый дескриптор, поскольку он должен иметь возможность передать его poll() для низкоуровневого опроса событий.
  2. Ваш вопрос не ясен. Игнорировать что? Реализовать что?

Я подозреваю, что вы должны иметь возможность просто использовать GUnixFDSource, созданный с помощью g_unix_fd_source_new() для отслеживания ввода на терминале FD. В его обратном вызове (g_source_set_callback()) вы должны иметь возможность читать из FD, используя обычные функции ввода-вывода терминала. GSource эффективно просто интегрирует FD в глобальный цикл событий (GMainContext).

person Philip Withnall    schedule 24.02.2017