小编Lar*_* M.的帖子

Linux FD向用户公开等待

想象一下,有一个库可以启动服务器套接字并管理所有客户端的epoll fd.由于所有内容都应该是非阻塞的,因此控制权将传递给用户,该用户可能希望对不同的fds进行选择,包括通知库的那个.

目前,用户指定回调.然后,用户可以调用评估epoll的服务例程并调用那些回调,以避免不断调用服务例程,而是执行用户可能想要在epoll fd上等待的其他事情.

在不暴露epoll fd的情况下向用户公开fd的正确方法是什么?对我来说,更好的解决方案是创建第二个只读文件描述符,如果epoll变得可读,它将变得可读.这可能吗?

我知道使用服务线程的可能解决方案,但我更愿意,如果我可以做到这一点,而不会因同步而增加复杂性.

另一个可能的解决方案是eventfd和一个轮询epoll fd然后触发eventfd的线程.但这似乎超过了顶部.

linux events select epoll file-descriptor

5
推荐指数
0
解决办法
185
查看次数

在链接时插入字符串

我想定义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)

我知道包含这些 stringconfig.h方法和构建目标文件。但它的 2019 年知道。如此简单的任务应该很容易。

编辑更精确的问题 Go Linker 的-X选项在 gcc/binutils 中是否有等效选项。

c c++ linker

0
推荐指数
1
解决办法
353
查看次数

标签 统计

c ×1

c++ ×1

epoll ×1

events ×1

file-descriptor ×1

linker ×1

linux ×1

select ×1