linux新的API signalfd、timerfd、eventfd使用说明——eventfd

好久没更新了,今天看一下第三种新的fd:eventfd类似于管道的概念,可以实现线程间的事件通知,所不同的是eventfd的缓冲区大小是sizeof(uint64_t)也就是8字节,它是一个64位的计数器,写入递增计数器,读取将得到计数器的值,并且清零。看一下代码:

[cpp] view plaincopy
  1. #include <sys/eventfd.h>  
  2. #include <unistd.h>  
  3. #include <stdlib.h>  
  4. #include <stdio.h>  
  5. #include <stdint.h>             /* Definition of uint64_t */  
  6.   
  7. #define handle_error(msg) \  
  8.    do { perror(msg); exit(EXIT_FAILURE); } while (0)  
  9.   
  10. int  
  11. main(int argc, char *argv[])  
  12. {  
  13.    uint64_t u;  
  14.       
  15.    int efd = eventfd(10, 0);  
  16.    if (efd == -1)  
  17.        handle_error("eventfd");  
  18.      
  19.    int ret = fork();  
  20.    if(ret == 0)  
  21.    {  
  22.        for (int j = 1; j < argc; j++) {  
  23.            printf("Child writing %s to efd\n", argv[j]);  
  24.            u = atoll(argv[j]);  
  25.            ssize_t s = write(efd, &u, sizeof(uint64_t));  
  26.            if (s != sizeof(uint64_t))  
  27.                handle_error("write");  
  28.        }  
  29.        printf("Child completed write loop\n");  
  30.   
  31.        exit(EXIT_SUCCESS);  
  32.    }  
  33.    else  
  34.    {  
  35.        sleep(2);  
  36.   
  37.        ssize_t s = read(efd, &u, sizeof(uint64_t));  
  38.        if (s != sizeof(uint64_t))  
  39.            handle_error("read");  
  40.        printf("Parent read %llu from efd\n",(unsigned long long)u);  
  41.        exit(EXIT_SUCCESS);  
  42.    }  
  43. }  
比较简单,不做过解释。子进程写入命令行中传入的参数,父进程读取其中计数器的值。

运行结果:

[cpp] view plaincopy
  1. ./eventfd 10 20 30  
  2. Child writing 10 to efd  
  3. Child writing 20 to efd  
  4. Child writing 30 to efd  
  5. Child completed write loop  
  6. Parent read 70 from efd  
命令行传入的是10、20、30其和应为60,为啥读取的是70呢?请看15行调用eventfd时第一个参数是10,这个参数是创建eventfd时初始化计数器的值。

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

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

相关文章

【最近的学习安排】

打算先把手头上的资源先消化得差不多了再看新的东西吧&#xff0c;编程之美、编程珠玑、程序员面试100题、刀疤鸭数据结构面试题、大话数据结构、数据结构与算法分析&#xff08;C描述&#xff09;&#xff0c;JAVA核心技术卷I&#xff0c;C Primer&#xff08;着重看类相关的和…

bitnamigitlab_Bitnami Gitlab 修改端口

BITNAMI Gitlab是个界面和使用都非常友好的Version Control工具&#xff0c;但其端口限制的弊端&#xff0c;导致部署很不爽&#xff0c;作为使用者&#xff0c;把我遇到的问题与大家共享。强烈建议不要修改端口&#xff0c;经查看数据库数据&#xff0c;链接地址带端口和不带端…

python字符串排序_Python对字符串列表进行排序

在本教程中&#xff0c;我们将看到如何对字符串列表进行排序。我们将使用sort方法和sorted函数对给定的字符串列表进行排序。然后&#xff0c;我们将了解如何根据不同的条件&#xff08;例如长度&#xff0c;值等&#xff09;对字符串列表进行排序&#xff0c; 让我们看看如何使…

莫名其秒的Cannot load JDBC driver class 'com.mysql.jdbc.Driv

JAR包正常的情况下出现 服务器没有找到驱动jar 报错Cannot load JDBC driver class com.mysql.jdbc.Driv 原因是没有把MYSQL驱动放在TOMCAT的LIB目录下 解决方法:把JDBC驱动放到Tomcat的common/lib下&#xff0c;重新启动服务器 转载于:https://www.cnblogs.com/leiteng/archiv…

web——Tomcat Maven插件及Servlet入门

• IDEA中使用Tomcat-Tomcat Maven插件 ○ Pom.xml添加Tomcat插件<build><plugins><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version><!--&…

外架小横杆外露长度规范要求_安全文明施工规范

分类规范内容内外架安全1、扫地杆离地0.2米&#xff0c;立杆间距1.5米&#xff0c;外大横杆上下间距1米&#xff0c;内大横杆上下间距1.8米&#xff0c;步距1.8米2、立杆着落点不得悬空&#xff0c;垫块面积&#xff1e;240240mm3、外架和支模架不得连接、固定在一起4、外架操作…

java 邮件模板_Spring Boot 2发送邮件手把手图文教程

点击上方 IT牧场 &#xff0c;选择 置顶或者星标技术干货每日送达&#xff01;本文基于&#xff1a;Spring Boot 2.1.3&#xff0c;理论支持Spring Boot 2.x所有版本。最近有童鞋问到笔者如何用Spring Boot发送邮件&#xff0c;故而整理下Spring Boot发送邮件的各种姿势。说到邮…

eventfd man

概要 #include<sys/eventfd.h>int eventfd(unsigned int initval, intflags);描述eventfd()创建一个“eventfd对象”&#xff0c;这个对象能被用户空间应用用作一个事件等待/响应机制&#xff0c;靠内核去响应用户空间应用事件。这个对象包含一个由内核保持的无符号64位整…

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;表的主键不做…