想象一下,有一个库可以启动服务器套接字并管理所有客户端的epoll fd.由于所有内容都应该是非阻塞的,因此控制权将传递给用户,该用户可能希望对不同的fds进行选择,包括通知库的那个.
目前,用户指定回调.然后,用户可以调用评估epoll的服务例程并调用那些回调,以避免不断调用服务例程,而是执行用户可能想要在epoll fd上等待的其他事情.
在不暴露epoll fd的情况下向用户公开fd的正确方法是什么?对我来说,更好的解决方案是创建第二个只读文件描述符,如果epoll变得可读,它将变得可读.这可能吗?
我知道使用服务线程的可能解决方案,但我更愿意,如果我可以做到这一点,而不会因同步而增加复杂性.
另一个可能的解决方案是eventfd和一个轮询epoll fd然后触发eventfd的线程.但这似乎超过了顶部.
我想定义const char*程序使用的外部全局符号 ( )。在链接时添加具有给定值的符号。这对于例如提交哈希或构建时间很有用。
我发现--defsym它做了别的事情。Go 链接器通过-X选项支持此功能。(是的,我知道,Go 字符串是管理的,但我说的是普通的零终止 c 字符串)
例如:
extern const char *git_commit;
int main(int argc, char *argv[]) {
puts(git_commit);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
gcc main.o -Wl<something here that adds git_commit and set it to '84e5...'>
Run Code Online (Sandbox Code Playgroud)
我知道包含这些 string的config.h方法和构建目标文件。但它的 2019 年知道。如此简单的任务应该很容易。
编辑更精确的问题
Go Linker 的-X选项在 gcc/binutils 中是否有等效选项。