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

三种新的fd加入linux内核的的版本:

signalfd:2.6.22

timerfd:2.6.25

eventfd:2.6.22

三种fd的意义:

signalfd:传统的处理信号的方式是注册信号处理函数;由于信号是异步发生的,要解决数据的并发访问,可重入问题。signalfd可以将信号抽象为一个文件描述符,当有信号发生时可以对其read,这样可以将信号的监听放到select、poll、epoll等监听队列中。

timerfd:可以实现定时器的功能,将定时器抽象为文件描述符,当定时器到期时可以对其read,这样也可以放到监听队列的主循环中。

eventfd:实现了线程之间事件通知的方式,eventfd的缓冲区大小是sizeof(uint64_t);向其write可以递增这个计数器,read操作可以读取,并进行清零;eventfd也可以放到监听队列中,当计数器不是0时,有可读事件发生,可以进行读取。

三种新的fd都可以进行监听,当有事件触发时,有可读事件发生。

signalfd涉及API:
[cpp] view plaincopy
  1. #include <sys/signalfd.h>  
  2. int signalfd(int fd, const sigset_t *mask, int flags);  

参数fd:如果是-1则表示新建一个,如果是一个已经存在的则表示修改signalfd所关联的信号;

参数mask:信号集合;

参数flag:内核版本2.6.27以后支持SFD_NONBLOCK、SFD_CLOEXEC;

成功返回文件描述符,返回的fd支持以下操作:read、select(poll、epoll)、close

timerfd涉及的API
[cpp] view plaincopy
  1. #include <sys/timerfd.h>  
  2. int timerfd_create(int clockid, int flags);  
  3. int timerfd_settime(int fd, int flags,  
  4.                     const struct itimerspec *new_value,  
  5.                     struct itimerspec *old_value);  
  6. int timerfd_gettime(int fd, struct itimerspec *curr_value);  
[cpp] view plaincopy
  1. timerfd_create:创建一个timerfd;返回的fd可以进行如下操作:read、select(poll、epoll)、close  
  2. timerfd_settime:设置timer的周期,以及起始间隔  
  3. timerfd_gettime:获取到期时间。  
[cpp] view plaincopy
  1. 函数参数中数据结构如下:  
  2. struct timespec  
  3. {  
  4.     time_t tv_sec;                /* Seconds */  
  5.     long   tv_nsec;               /* Nanoseconds */  
  6. };  
  7.   
  8. struct itimerspec  
  9. {  
  10.     struct timespec it_interval;  /* Interval for periodic timer */  
  11.     struct timespec it_value;     /* Initial expiration */  
  12. };  
eventfd涉及API:
[cpp] view plaincopy
  1. #include <sys/eventfd.h>  
  2. int eventfd(unsigned int initval, int flags);  

创建一个eventfd,这是一个计数器相关的fd,计数器不为零是有可读事件发生,read以后计数器清零,write递增计数器;返回的fd可以进行如下操作:read、write、select(poll、epoll)、close

 

这是三种新的fd的基本概念,接下来的几篇会通过例子程序来说明各种fd的用法。

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

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

相关文章

grpc入门到精通_Spring Cloud 从入门到精通(一)Nacos 服务中心初探

点击上方蓝色“Java精选”&#xff0c;选择“设为星标”技术文章第一时间送达&#xff01;什么是Nacos&#xff1f;Nacos是阿里巴巴开源的项目&#xff0c;是一个更易于帮助构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos英文全称是Dynamic Naming and Configur…

百度新年贪吃蛇效果

闲来无事&#xff0c;在网上闲逛的时候开到有人说百度蛇年的贪吃蛇logo小游戏不错&#xff0c;于是乎就自己仿照写了一个。&#xff08;注&#xff1a;所有素材都来自百度&#xff09; 效果图 用到的图片 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional…

贝叶斯公式设b_数据分析经典模型——朴素贝叶斯

编辑导语&#xff1a;做过数据分析的人&#xff0c;想必对贝叶斯模型都不会陌生。贝叶斯预测模型是运用贝叶斯统计进行的一种预测&#xff0c;不同于一般的统计方法&#xff0c;其不仅利用模型信息和数据信息&#xff0c;而且充分利用先验信息。通过实证分析的方法&#xff0c;…

QGraphicsProxyWidget paintEvent(from 1+1 =2)

标题不好取&#xff0c;起源于CSDN中看到有网友提问&#xff1a;如果将一个QWidget同时显示在 QGraphicsView 和其他和view同级的普通的Widget中。 QGraphicsProxyWidget QGraphicsProxyWidget 是为将 QWidget 嵌入到 QGraphicsScene 中而引入的代理。 将 event 在二者之间进行…

Asterisk使用数据库配置方法

安装&#xff1a; 1、安装 unixODBC unixODBC-devel libtool-ltdl libtool-ltdl-devel &#xff0c;为了使asterisk支持数据库存储&#xff08;必须先安装&#xff09; 2、安装 mysql 并设置好 C_INCLUDE_PATH 和 LD_LIBRARY_PATH 3、从 http://www.asterisk.org/downloads 下载…

linux文件系统_Linux的文件系统简介

inux操作系统的本质可以说就是文件系统的集合&#xff0c;文件系统既包含文件的数据也包含文件系统的结构。在Linux文件系统中&#xff0c;EXT2文件系统、虚拟文件系统、/proc文件系统是三个具有代表性的文件系统。/proc文件系统是一个伪文件系统&#xff0c;它只存在内存当中&…

matlab如何测两点的角度_根据2点经纬度,计算方位角,以及计算2条线的夹角

以真北为0度起点&#xff0c;由东向南向西顺时针旋转360度&#xff0c;主要是用于控制象限。根据2点经纬度&#xff0c;计算方位角[csharp]////// 给定2点&#xff0c;获得经纬度/// /// 起点经纬度&#xff0c;都是以度为单位/// 终点经纬度&#xff0c;都是以度为单位/// pri…

VMWare 环境下devstack创建虚拟机报错及修改nova-api返回数据得条目

1、在生产环境中&#xff0c; 由于某个tenant下创建了有1300条得security-group通过查询nova得数据库可以看出确实有1300条得存在&#xff0c;但是通过curl调用的时候发现返回得数目只有1000条 可以通过修改nova.conf文件得osapi_max_limit 项修改返回得条目限制&#xff0c;默…

使用数据库保存Asterisk sip账号信息(odbc方式)

在默认情况下&#xff0c;Asterisk的配置文件都保存在/etc/asterisk目录中&#xff0c;以ini文件的格式保存。我们也可以使用数据库来保存大多数Asterisk配置信息。 Asterisk使用数据库保存配置信息有两种方法&#xff1a;静态和动态&#xff0c;对于不经常修改的配置数据&…

删除按钮_汪涵拜师学艺第七篇:往来单位查询删除按钮和新增判断的设计!

老师好&#xff01;大家好&#xff01;我叫汪涵&#xff1a;今天给大家分享往来单位查询删除按钮和新增判断的设计&#xff01;在开始具体内容之前&#xff0c;请让我先分享我们的价值观&#xff1a;用自律和勤奋来改变命运&#xff0c;不走捷径&#xff0c;有爱心&#xff0c;…

python requests https_解决python的requests模块访问私有SSL证书产生的报错问题

如题访问部分私有SSL证书网站时报如下错误requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)测试环境kali linux 1.1.0Python 2.7.8python-openssl 0.13-2deb7u1requests 2.3.0测试代码#/usr/bin/python#codingutf-8imp…

Ubuntu 12.04(32位)安装Oracle 11g(32位)全过程以及几乎所有问题的解决办法

这两天在Ubuntu上安装Oracle把人折腾毁了&#xff0c;即使照着网上的教程来&#xff0c;还是出了很多问题。好在最后终于搞定了。写出来总结一下&#xff0c;免得以后忘了。 标题注明32位是因为网上教程几乎全是以64位安装为例的&#xff0c;32位系统下照着做是绝对会安装失败的…

dio设置自定义post请求_Flutter Dio简单二次封装和自定义Header

话不多说自己看代码封装的比较简单&#xff0c;比较适合入门学习Dio。import package:dio/dio.dart;import Api.dart;/** 封装 restful 请求** GET、POST、DELETE、PATCH* 主要作用为统一处理相关事务&#xff1a;* - 统一处理请求前缀&#xff1b;* - 统一打印请求信息&#x…

解决asterisk sip呼叫 488 no acceptable here

这两天实验了一下asterisk static realtime方案&#xff0c;将sip.conf的信息保存到mysql数据库里。但是呼叫的时候&#xff0c;总是 报 488 no acceptable here。 这是我的sip.conf文件&#xff0c;数据库里和sip.conf文件一模一样&#xff0c;但是就是不行。 [general] c…

怎么安装python3.6.5_Centos7 安装Python3.6.5

一、centos7 安装 Python3.6.5教程1、在安装Python之前&#xff0c;需要先安装一些后面遇到的依赖问题(如果有依赖问题&#xff0c;按照提示安装)&#xff1a;yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-d…

关于浏览器模式和文本模式的困惑

什么是浏览器模式和文本模式&#xff1f; 经常使用IE开发者工具的同学&#xff0c;肯定见过浏览器模式和文本模式&#xff0c;对于这两个名词&#xff0c;综合相关文档解释如下&#xff1a; 浏览器模式&#xff08;Browser Mode&#xff09;&#xff0c;用于切换IE针对该网页的…

mysql 关联索引_mysql中关于关联索引的问题——对a,b,c三个字段建立联合索引,那么查询时使用其中的2个作为查询条件,是否还会走索引?...

情况描述&#xff1a;在MySQL的user表中&#xff0c;对a,b,c三个字段建立联合索引&#xff0c;那么查询时使用其中的2个作为查询条件&#xff0c;是否还会走索引&#xff1f;根据查询字段的位置不同来决定&#xff0c;如查询a, a,b a,b,c a,c 都可以走索引的&#…

A20 看门狗

前言 说到看门狗&#xff0c;应该不会陌生&#xff0c;看门狗说白了就是一个定时器&#xff0c;但是它有一个非常重要的功能就是复位系统。在A20里&#xff0c;看门狗的操作非常简单&#xff0c;只有两个寄存器&#xff0c;不需要操作时钟相关的东西&#xff0c;系统起来后可以…

python拼接大量ts文件_Python爬取.ts文件,合并为mp4

目标&#xff1a;爬影视网站ts文件到本地&#xff0c;合并成mp4文件下载ts文件本着不重复造轮子的精神(好吧其实是我懒)&#xff0c;想用迅雷批量下载爬取&#xff0c;但是迅雷提供的通配符过于简单无法构造URL&#xff0c;只能自己写脚本如下&#xff1a;# -*- coding: utf-8 …

android学习笔记之ProgressDialog的使用

在很多PC软件或手机软件中&#xff0c;我们都会看见 “加载中...” 类似的对话框&#xff0c;当然&#xff0c;在android应用程序中也是如此。如果我们想在android应用程序中使用这样的效果&#xff0c;那么就需要用到ProgressDialog。首先&#xff0c;我们来看一下ProgressDia…