#include<sys/eventfd.h>#include<unistd.h>#include<iostream>intmain(){intefd = eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC); eventfd_write(efd,2);// 写入2,计数器为2eventfd_write(efd,3);// 写入3, 计数器为2 + 3 = 5eventfd_write(efd,4);// 写入3, 计数器为5 + 4 = 9eventfd_tcount;...
eventfd文件描述符的标志,可由三种选项组成:EFD_CLOEXEC、EFD_NONBLOCK和EFD_SEMAPHORE。 EFD_CLOEXEC:表示返回的eventfd文件描述符在fork后exec其他程序时会自动关闭这个文件描述符; EFD_NONBLOCK:设置返回的eventfd非阻塞; EFD_SEMAPHORE: 表示将eventfd作为一个信号量来使用。 读eventfd read(2) 1.read函数会从eventfd...
第二个参数是描述这个事件对象的属性,可以设置为EFD_NONBLOCK , EFD_CLOEXEC;前面的是设置对象为非阻塞状态,如果没有设置为非阻塞状态,read系统调用来读这个计数器,且计数器的值为0时,就会一直阻塞在read系统调用上,反之如果设置了该标志位,就会返回EAGAIN错误。后面的EFD_CLOEXEC功能是在程序调用exec()函数族加载其...
}intmain(intargc,char*argv[]){intefd = eventfd(0, EFD_CLOEXEC);if(efd <0) {printf("create efd error. \n");return-1; }printf("efd: %d,\n", efd);// 创建子线程进进行写入pthread_tchild_thread; pthread_create(&child_thread,0, child_write, &efd);if(child_thread <0) {printf("...
flags:eventfd文件描述符的标志,可由三种选项组成:EFD_CLOEXEC、EFD_NONBLOCK和EFD_SEMAPHORE。 EFD_CLOEXEC:表示返回的eventfd文件描述符在fork后exec其他程序时会自动关闭这个文件描述符; EFD_NONBLOCK:设置返回的eventfd非阻塞; EFD_SEMAPHORE表:表示将eventfd作为一个信号量来使用。
PollLoop::PollLoop() : mTid(0), mLooping(false) { mWakeUpHandler = PollEventHandlerPtr(new PollEventHandler(eventfd(0, EFD_CLOEXEC))); mWakeUpHandler->EnableRead(true); mWakeUpHandler->SetReadCallBk(std::bind(&PollLoop::OnWakeUp, this)); } 成功的创建了监听eventfd的事件分发器,完成m...
EFD_CLOEXEC (02000000):就是fork子进程时不继承父进程资源,对于多线程的程序通常设置此值。 EFD_NONBLOCK(00004000):非堵塞模式O_NONBLOCK EFD_SEMAPHORE(0):支持semophore语义的read,简单说就值递减1。 do_eventfd struct eventfd_ctx { struct kref kref; ...
第二个参数是描述这个事件对象的属性,可以设置为EFD_NONBLOCK , EFD_CLOEXEC;前面的是设置对象为非阻塞状态,如果没有设置为非阻塞状态,read系统调用来读这个计数器,且计数器的值为0时,就会一直阻塞在read系统调用上,反之如果设置了该标志位,就会返回EAGAIN错误。后面的EFD_CLOEXEC功能是在程序调用exec()函数族加载其...
int event_fd = eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC); int ep_fd = epoll_create1(EPOLL_CLOEXEC); create_epoll(){ struct epoll_event event; event.data.fd = event_fd; event.events = EPOLLIN | EPOLLET; epoll_ctl(ep_fd, EPOLL_CTL_ADD, event_fd, &event); ...
// initval:创建eventfd时它所对应的64位计数器的初始值;// flags:eventfd文件描述符的标志,可由三种选项组成:EFD_CLOEXEC、EFD_NONBLOCK和EFD_SEMAPHOREEFD_CLOEXEC表示返回的eventfd文件描述符在fork后exec其他程序时会自动关闭这个文件描述符;EFD_NONBLOCK设置返回的eventfd非阻塞;EFD_SEMAPHORE表示将eventfd作为一个...