Shawl: 将一切应用程序运行为Windows服务
Shawl是一个用Rust编写的能够将任何程序作为Windows服务运行的包装程序。它可以处理Windows服务的API,因此您原本的程序只需要响应ctrl-C
或者SIGINT
。创建需要作为服务来运行的项目,只需将Shawl与您的项目捆绑在一起,将其设置为入口点,然后通过CLI传递指令来运行。
了解更多:crates.io GitHub
Rust中的插件
Rust语言为我们提供了许多非常强大的工具,为应用程序提升了灵活性和可扩展性(例如特征、枚举、宏等),但是所有这些都是在编译时完成的。但是为了获得我们所希望的灵活性,我们希望能够在运行时添加新功能。
这可以使用一个称为动态加载的技术来实现。
何为动态加载?
动态加载是所有主流操作系统提供的一种可以在运行时加载库的机制,以便用户检索函数或变量的地址。然后可以像使用其他任何指针一样使用这些函数和变量的地址。
在* nix平台上,dlopen()
函数用于将库加载到内存中,然后dlsym()
能够让您通过其符号名称获取指向某变量的指针。需要记住的一点是,符号不包含任何类型信息,因此调用者必须将指针转换为正确的类型。
通常,通过与某种类型的协定提前完成加载库来完成.例如,头文件需要声明"cos
"函数为 fn(f64) -> f64
.
来自man dlopen
的示例: