核心概念
event ring C API 中有两个核心对象:- struct
monad_event_ring- 表示一个已将其共享内存段映射到当前进程地址空间的 event ring;客户端对该对象最主要的用途是使用它初始化指向 event ring 的迭代器,使用monad_event_ring_init_iterator函数 - struct
monad_event_iterator- 主角:该迭代器对象用于顺序读取事件。迭代器的try_next操作会拷贝当前事件描述符(如果可用),如果成功则推进迭代器。概念上其行为类似表达式descriptor = *i++,前提是有事件描述符立即就绪(否则什么也不做)
eventwatch 示例程序。该程序将执行事件的 ASCII 表示形式转储到 stdout,这些事件由运行在同一主机上的执行层守护进程写入。
在 eventwatch 中,事件描述符被完全解码,但事件负载仅以十六进制转储形式显示,因为这个简单程序不包含所有事件负载类型的美化打印逻辑。该程序仅 250 行代码,通读它应能解释各个 API 调用如何协同工作。
SDK 还包括 C++20 std::formatter 特化,可将事件负载完全解码为人类可读形式。这些被 monad-event-cli 实用程序使用。
在您的项目中使用 API
libmonad_event 面向第三方集成设计,因此除了较新版本的 glibc 外没有其他库依赖。这也意味着它不依赖 monad 仓库的其他部分或其构建系统:唯一要求是支持 C23 的 C 编译器。
构建 C 示例程序的”开始使用”指南讨论了多种方法将 SDK 库作为第三方依赖用于您的代码。或者,可以将组成库目标的源文件复制到您自己的代码库中。也提供了 Rust 客户端库。
API 概览
event ring API
所有可能失败的函数都会返回
errno(3) 域错误码,说明失败原因。可调用 monad_event_ring_get_last_error 函数以提供失败原因的人类可读字符串说明。
事件迭代器 API
event ring 实用 API
库组织
libmonad_event 中的 event ring 文件:
libmonad_event 中的执行事件文件:
libmonad_event 中的支持文件:
SDK 中的其他文件:

