eventfd man

概要
    #include<sys/eventfd.h>
    int eventfd(unsigned int initval, intflags);

描述
eventfd()创建一个“eventfd对象”,这个对象能被用户空间应用用作一个事件等待/响应机制,靠内核去响应用户空间应用事件。这个对象包含一个由内核保持的无符号64位整型计数器。这个计数器由参数initval说明的值来初始化。
从linux2.6.27开始,下面的值可以在flags中被 OR 来改变eventfd()的行为:
EFD_NONBLOCK 在新打开的文件描述符中设置O_NONBLOCK文件状态标示。使用这个标示节省了对fcntl的额外调            用。

EFD_CLOEXEC  在新打开的文件描述符中设置close-on-exec(FD_CLOEXEC)标示。

在linux2.6.26版本以下,flags参数都是不能够使用的,必须为0.

eventfd()返回一个新的与eventfd对象关联的文件描述符。下面的操作能在这个文件描述符上执行:
read
如果eventfd计数器为一个非0值,read返回包含这个值的8个字节,并且这个计数器的值被重置为0.(返回的值为主机字节序)。
如果read的时候计数器为0,调用要么阻塞直到计数器变为非0,要么失败返回EAGAIN,如果文件描述符是非阻塞的话。
read会失败返回EINVAL,如果提供的buffer大小小于8字节的话。

write
write调用向计数器增加一个由它的buffer提供的8字节整型值。计数器能存储的最大值是最大的无符号64位整型值少1(0xfffffffffffffffe)。如果增加导致计时器的值超过了最大值,write要么阻塞直到一个read在这个文件描述符上执行,要么返回EAGAIN,如果文件描述法是非阻塞的。
write会失败返回EINVAL,如果提供的buffer大小小于8字节的话,或者如果试图写入值0xffffffffffffff。

poll,select(等)
返回的文件描述符支持poll和select,如下:
文件描述符是可读的(seceltreadfds参数;)如果计数器值大于0.
文件描述符是可写的,如果它可以被写入一个至少为1的值而不会被阻塞。
如果计数器值被检测到溢出了,select会指示这个文件描述符为可读可写。如上所提醒的,write决不能溢出计数器。
eventfd文件描述符也支持其他文件多路转接API:pselcet,ppoll,epoll。

close
当文件描述符不再被需要的时候它要被关闭。当所有和同一个eventfd对象相联系的文件描述符被关系时,对象的资源就被内核清空。

由eventfd()创建的文件描述符拷贝被子进程通过fork所继承。文件描述符的副本是同同一个eventfd对象相联系的。由eventfd()创建的文件描述符在execve时被保留。

返回值
成功时,eventfd()返回一个新的eventfd文件描述符。失败时,返回-1,errno指出错误情况。

错误
EINVAL  标示不合法;在linux2.6.26或更早版本中,flags非0。
EMFILE   到达进程最大打开文件描述符限制。
ENFILE   到达系统总共能打开的文件数。
ENODEV   不能挂载匿名节点设备。
ENOMEM   没有创建一个新eventfd文件描述符的足够内存。

版本
eventfd()自从2.6.22开始可用。glibc版本2.8开始提供支持。eventfd2()系统调用从linux2.6.27开始可用。自从2.9开始,glibceventfd()用evnetfd2()系统调用封装,如果内核支持的话。

注意
应用可以使用一个eventfd文件描述符来取代一个管道,在所有管道用来作为事件通知的情况下。内核消耗在一个eventfd文件描述符上的远比在一个管道上的少,并且仅需要一个文件描述符(管道需要2个)。
当使用在内核中时,一个eventfd文件描述符能提供一个内核-用户空间的桥梁。
一个关于eventfd要指出的地方是它能像其他文件描述符一样用select,poll。epoll来监控。这意味着一个应用能同时监控:传统“文件的读端,和其他支持eventfd接口的内核机制的读端。

后面的不想翻译了

EXAMPLE

       The following program creates an eventfd file descriptor and then forks tocreate a child process.  While the parent briefly sleeps, the child writeseach of the integers supplied in the program's command-line arguments to theeventfd file descriptor.  When the parent has finished sleeping, it reads fromthe eventfd file descriptor.
The following shell session shows a sample run of the program:
 $ ./a.out 1 2 4 7 14 
 Child writing 1 to efd 
 Child writing 2 to efd 
 Child writing 4 to efd 
 Child writing 7 to efd 
 Child writing 14 to efd 
 Child completed write loop 
 Parent about to readParent read 28 (0x1c) from efd

Program source

       #include <sys/eventfd.h> 
#include <unistd.h> 
#include <stdlib.h>
#include <stdio.h> 
#include <stdint.h> 
  
 #define handle_error(msg) \ 
 do { perror(msg); exit(EXIT_FAILURE); } while (0) 
 intmain(int argc, char *argv[]) 
 {int efd, j; 
 uint64_t u; 
 ssize_t s; 
 if (argc < 2) 

 fprintf(stderr, "Usage: %s <num>...\n", argv[0]); 
 exit(EXIT_FAILURE); 
 
 efd = eventfd(0, 0);
 if (efd == -1)handle_error("eventfd"); 
 switch (fork()) 

 case 0: 
 for (j = 1; j < argc; j++) 

 printf("Child writing %s to efd\n", argv[j]);
 u = strtoull(argv[j], NULL, 0); 
  
 s = write(efd, &u, sizeof(uint64_t)); 
 if (s != sizeof(uint64_t)) 
 handle_error("write"); 
 
 printf("Child completed write loop\n"); 
 exit(EXIT_SUCCESS); 
 default:
 sleep(2); 
 printf("Parent about to read\n"); 
 s = read(efd, &u, sizeof(uint64_t));
 if (s != sizeof(uint64_t)) 
 handle_error("read"); 
 printf("Parent read %llu (0x%llx) from efd\n",(unsigned long long) u, (unsigned long long) u); 
 exit(EXIT_SUCCESS); 
 case -1: 
 handle_error("fork"); 
 }
 }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/433626.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uva11991 Easy Problem from Rujia Liu?

题目链接。 分析&#xff1a; 《算法竞赛入门经典——训练指南》上的一道例&#xff08;水&#xff09;题&#xff0c;map的应用&#xff0c;个人感觉代码中注释掉的那一句没有什么意义&#xff0c;就注释掉了&#xff0c;提交确实也对了。 map的小知识点&#xff08;总结自c p…

Web——Request请求

•Request通用方式获取请求参数 ○ 请求参数获取方式&#xff1a; GET方式&#xff1a;□ String getQueryString() POST方式&#xff1a;□ BufferedReader getReader()○ 通用方式&#xff1a; Map<String, String[]> getParameterMap()//获取所有参数Map集合 String[]…

mfc点击按钮让对话框关闭_WinXP系统开始菜单中关机按钮消失的恢复教程

WinXP系统开始菜单里面的关机按钮不见了怎么办&#xff1f;最近有用户反映&#xff0c;打开WinXP系统的开始菜单准备关机时&#xff0c;却发现无法关机了&#xff0c;开始菜单里面没有关机按钮&#xff0c;这是怎么回事&#xff1f;本文就为大家介绍XP系统恢复开始菜单关机按钮…

python中如何标识语句块_如何用python在一个块中编写多个try语句?

我会为此编写一个快速包装函数first()。 用法&#xff1a;value first([f1, f2, f3, ..., fn], defaultAll failed)#!/usr/bin/env def first(flist, defaultNone): """ Try each function in flist until one does not throw an exception, and return the re…

std::map用法

std::map用法 STL是标准C系统的一组模板类&#xff0c;使用STL模板类最大的好处就是在各种C编译器上都通用。在STL模板类中&#xff0c;用于线性数据存储管理的类主要有vector, list, map 等等。本文主要针对map对象&#xff0c;结合自己学习该对象的过程&#xff0c;讲解一下具…

马逊s3云存储接口_当对象存储“湖”有了强一致性

从 2006年第一个云服务对象存储服务 Amazon S3 发布直到 2020年12月1日之前&#xff0c;S3 对象操作都是遵循 “最终一致性”原则&#xff0c;对象存储服务本身就是一个复杂的分布式系统&#xff0c;但对用户暴露简单的 API 服务接口&#xff0c;无限扩展存储大小&#xff0c;极…

Web——Request转发和Response重定向

• Request请求转发 ○ 请求转发 请求转发&#xff08;forward&#xff09;&#xff1a;一种在服务器内部的资源跳转方式 ○ 实现方式&#xff1a; request.getRequestDispatcher("资源B路径").forward(request,response);○ 请求转发资源间共享数据&#xff1a;使用…

if else if语句格式_闲话Python之条件语句IF

我发现好像哪里都会有if&#xff0c;下面就来聊聊Python当中if的常见用法。最简单的格式就是&#xff0c;只有一个if&#xff0c;比如下面这个&#xff1a;my_deposit代码中的my_deposit50000等效于my_depositmy_deposit50000his_deposit-50000则等效于his_deposithis_deposit-…

delphi下实现ribbon界面的方法(一)

delphi下实现ribbon界面的方法&#xff08;一&#xff09; office 2007和2010是现在大多数人经常使用的办公软件&#xff0c;几乎每天都在使用。因此&#xff0c;在软件中如果使用类office的界面样式&#xff0c;客户用着非常习惯&#xff0c;而且学习曲线低&#xff0c;office…

Boost库之function的使用

http://www.cnblogs.com/hujian/archive/2009/06/04/1495813.html Boost库的function是一组函数对象包装类的模板&#xff0c;实现了一个泛型的回调机制。Boost库的function与函数指针相比&#xff0c;优点在于它允许用户在目标的实现上拥有更大的弹性&#xff0c;即目标既可以…

Web笔记——Filter过滤器

○ 概念&#xff1a;Filter表示过滤器&#xff0c;是JavaWeb三大组件(Servlet、Filter、Listener)之一。 ○ 过滤器可以把对资源的请求拦截下来&#xff0c;从而实现一些特殊的功能。 ○ 过滤器一般完成一些通用的操作&#xff0c;比如&#xff1a;权限控制、统一编码处理、敏感…

mysql修改语句_序言:MySQL与Navicat安装Tips

一、数据库相关的基础知识1.1 数据分析师主要集中在select高效查找上&#xff0c;纯粹的底层运维就不需要太关注&#xff1b;1.2 数据库与表类比sheet是表&#xff0c;整个Excel文件是一个数据库&#xff1b;1.3 行与列1.4 主键&#xff08;人的身份证&#xff09;表的主键不做…

java office文件加水印_永中Office与统一操作系统UOS完成适配,开辟高效智能办公新领域...

近日&#xff0c;永中Office办公软件完成了与统一操作系统UOS的适配工作&#xff0c;此次成功适配表明信息技术应用创新操作系统与办公软件兼容性能优良、运行稳定&#xff0c;大幅提升用户在信创计算机上的办公体验&#xff0c;可为政企提供安全可靠的IT环境。永中Office是由永…

ContentType的类型

早上做了下载的功能&#xff0c;涉及到ContentType的类型&#xff0c;特地上网查了下&#xff0c;收集了这些类型  ".*""application/octet-stream"  ".001""application/x-001"  ".301""application/x-301"…

c3p0依赖导入失败问题

今天在学习c3p0的时侯&#xff0c;导入依赖后变红然后去maven仓库[&#xff08;https://mvnrepository.com/artifact/com.mchange/c3p0&#xff09;]中找&#xff0c;发现是groupId的问题。 更改后正常

open函数中O_CLOEXEC标志的开关

Linux中&#xff0c;文件描述符有一个属性&#xff1a;CLOEXEC&#xff0c;即 当调用exec&#xff08;&#xff09;函数成功后&#xff0c;文件描述符会自动关闭。在以往的内核版本&#xff08;2.6.23以前&#xff09;中&#xff0c;需要调用 fcntl(fd, F_SETFD, FD_CLOEXEC) 来…

c++ char*初始化_C开发实战-深入理解指针

Visual Studio 2019 解决方案的多项目应用在讲述变量&#xff0c;数据类型&#xff0c;运算符和表达式以及程序流程控制&#xff0c;数组&#xff0c;函数的相关内容&#xff0c;所有的代码都放在解决方案c-core的c-core-foundational项目下。如果你有其他编程语言经验&#xf…

java游戏服务器面试_我做游戏开发这八年

点击上方“CSDN学院精品课”&#xff0c;选择“置顶公众号”CSDN学院精品课 IT人的职业提升平台作者 | kakashi8841简述这篇文章并不是想教会大家如何开发游戏&#xff0c;更不能教大家如何成为技术总监。而是分享我一路做开发的一些经历或心得体验。与编程擦肩而过2004年&…

vb.net 与 c# 的switch ... case ...的一个重要区别

vb.net 与 c# 的switch ... case ...的一个重要区别 与vb.net中case可以写比较表达式>,<,等&#xff0c;但在c# &#xff08;3.0及以下&#xff0c;不知道以后会不会加上&#xff09;中就没有这样的功能 看以下vb.net代码&#xff0c;确是c#的switch case没有的 [vb] vie…

SSM(Spring、SpringMVC、MyBatis)框架笔记——Spring入门

一、Spring简介 Spring是分层的Java SE/EE应用full-stack 轻量级开源框架&#xff0c; 以IoC&#xff08;Inverse Of Control&#xff1a;反转控制&#xff09;和AOP&#xff08;Aspect Oriented Programming&#xff1a;面向切面编程&#xff09;为内核。提供了展现层SpringM…