不到断气不罢休 发表于 2025-10-30 06:18:11

eventfd先容

https://i-blog.csdnimg.cn/direct/28c98383e539455db3c96bf9720d57c3.png
eventfd 是一个 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]
查看完整版本: eventfd先容