我正在尝试编写Gsource的子类以使用串行端口事件。我发现这样做的方式是使用POSIX终端接口,使用文件描述符来工作。出于任何原因,GLIB的主要事件循环具有处理此变量的特殊方法。
正如官方文档所说,有两个Gsource抽象功能用于准备派遣,一个用于派遣,一个在FD池之前运行,一个是在FD池之前运行的。这表明可能很重要的让Glib处理文件描述符,而是在我自己的准备功能中实现此功能,但是没有类似" PIN状态更改"以与串行端口引脚一起使用的条件。关于这个我有一些问题。
-
为什么Glib团队的选择使库处理文件描述符?
-
如果我只是忽略它并在我自己的准备功能中实现它,我可以遇到一些问题吗?
-
GSource
需要处理文件描述符,因为它需要能够将其传递给poll()
进行低级事件投票。 - 您的问题尚不清楚。忽略什么?实施什么?
我怀疑您应该只能使用使用g_unix_fd_source_new()
创建的GUnixFDSource
观察终端FD上的输入。在其回调(g_source_set_callback()
)中,您应该能够使用普通终端I/O功能从FD读取。GSource
实际上只是在那里将FD集成到全局事件循环中(GMainContext
)。