eventfd先容
https://i-blog.csdnimg.cn/direct/28c98383e539455db3c96bf9720d57c3.pngeventfd 是一个 Linux 体系调用,用于创建一个变乱关照文件形貌符。它通常用于进程间通讯(IPC),答应一个进程关照另一个进程某个变乱已发生。
#include <sys/eventfd.h>
int eventfd(unsigned int initval, int flags);参数分析
[*] initval:
[*] 范例: unsigned int
[*] 分析: 初始计数器值。当创建 eventfd 时,内核会初始化一个内部计数器,并将其值设置为 initval。
[*] flags:
[*] 范例: int
[*] 分析: 控制 eventfd 举动的标志位。可以是以下值的按位或组合:
[*] EFD_CLOEXEC: 设置文件形貌符的 close-on-exec 标志,表现在实行 exec 系列函数时自动关闭该文件形貌符。
[*] EFD_NONBLOCK: 设置文件形貌符为非壅闭模式。如果计数器为 0,读利用将立刻返回 EAGAIN 错误,而不是壅闭。
[*] EFD_SEMAPHORE: 将 eventfd 设置为信号量模式。在这种模式下,每次读利用只会将计数器减 1,而不是读取整个计数器的值。
返回值
[*] 乐成时,返回一个新的文件形貌符,用于后续的读写利用。
[*] 失败时,返回 -1 并设置 errno 以指示错误缘故起因。
利用场景
eventfd 通常用于以了局景:
[*] 线程间通讯: 一个线程可以通过写入 eventfd 来关照另一个线程。
[*] 进程间通讯: 父子进程或无关进程可以通过共享 eventfd 文件形貌符来举行变乱关照。
[*] 与 epoll 或 select 联合利用: eventfd 可以与其他 I/O 多路复用机制一起利用,以实现高效的变乱驱动编程。
利用示例
#include <iostream>
#include <unistd.h>
#include <sys/eventfd.h>
int main()
{
//int eventfd(unsigned int initval, int flags);
int efd = eventfd(0, EFD_CLOEXEC | EFD_NONBLOCK);
if(efd < 0)
{
perror("eventfd failed!!");
return -1;
}
uint64_t val = 1;
write(efd, &val, sizeof(val));
write(efd, &val, sizeof(val));
write(efd, &val, sizeof(val));
uint64_t res = 0;
read(efd, &res, sizeof(res));
std::cout << res << std::endl;
return 0;
}https://i-blog.csdnimg.cn/direct/cec6aed00f9240348728c32d392b6c09.png
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]