| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> 一起来感受下eventfd的魅力(一、eventfd使用介绍) -> 正文阅读 |
|
[系统运维]一起来感受下eventfd的魅力(一、eventfd使用介绍) |
一、函数介绍
eventfd()函数可以创建一个被用户空间应用程序作为“等待/通知”机制使用的eventfd对象,或被内核用于通知用户空间应用程序事件消息。eventfd对象包含一个uint64_t类型计数器,由内核进行维护。该计数器通过参数interval进行初始化。 eventfd()函数返回一个文件描述符,这个fd用于对eventfd对象的引用。 第二个参数在Linux 2.6.30以后的版本没有再使用了,所以再使用该函数的时候必须置0. 函数执行成功返回值为一个新的eventfd文件描述符,否则为-1; 二、函数说明????????无论什么情况下,如果仅仅是用于发出信号事件,应用程序可以使用一个eventfd文件描述符来替换管道。而且内核使用eventfd文件描述符的开销要比管道低得多,而且一个eventfd文件描述符就可以满足要求。 ????????当我们在kernel中使用eventfd时,一个eventfd文件描述符就是一个由内核通向用户空间的桥梁。像KAIO(Kernel AIO)一样,向文件描述符发送信号以表示某些操作的完成。 ? ? ? ? 还有一个关键点就是,eventfd文件描述符与其他文件描述符一样,可以被select、poll、epoll监听。这就意味着一个应用程序可以同时监听传统文件是否就绪,也可以监听kernel所支持的eventfd接口文件。 ? ? ? ? 当前的eventfd计数器可以通过进程的/proc/[pid]/fdinfo来查看。 2.1 C库和kernel中实现的区别有两个基础Linux系统调用,一个是eventfd(),一个是eventfd2()。前面一个系统调用函数的没有实现flags参数,后面一个系统调用函数则有对flags进行了实现。 2.2 glibc拓展功能GNU C库定义了一个额外的类型和两个函数来对eventfd文件描述符读写细节进行抽象:
如上两个函数主要实现了对eventfd文件描述符的读写操作,成功返回0,反之为-1。 三、使用例子3.1 代码案例
????????这个例子只是官方给我们的如何使用eventfd的一个例子,并不涉及到user space和kernel space之间的事件通信。因此我们还需要继续调研如使用eventfd来实现kerne向user space发送事件消息。来感受eventfd真正的魅力。 3.2 案例编译执行编译命令如下: gcc eventfd_test.c -std=c99 -o eventfd_test 执行过程如下:
四、再来说说evenfd? ? ? ? 前半篇读起来或许有些生硬。实际上可以把eventfd理解为是Linux内核为用户空间应用程序提供了一种信号量机制,但相较于传统POSIX信号量的优势是,eventfd在内核中以文件形式存在,可以用于select/epoll监听以达到异步的目的,避免在没有事件时发生阻塞。 ? ? ? ? 我们再看下具体的使用方法。 4.1 read读取计数器的值。
4.2 write向计数器中写入值。
4.3 IO多路复用epoll()/poll()/select(): 支持 IO 多路复用操作 4.4 close关闭文件描述符 在下一篇博客中我们再来聊一聊,kernel如何使用eventfd向user space发送消息事件。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 23:28:17- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |