linux新的API signalfd、timerfd、eventfd使用说明——eventfd
好久没更新了,今天看一下第三种新的fd:eventfd类似于管道的概念,可以实现线程间的事件通知,所不同的是eventfd的缓冲区大小是sizeof(uint64_t)也就是8字节,它是一个64位的计数器,写入递增计数器,读取将得到计数器的值,并且清零。看一下代码:
- #include <sys/eventfd.h>
- #include <unistd.h>
- #include <stdlib.h>
- #include <stdio.h>
- #include <stdint.h> /* Definition of uint64_t */
- #define handle_error(msg) \
- do { perror(msg); exit(EXIT_FAILURE); } while (0)
- int
- main(int argc, char *argv[])
- {
- uint64_t u;
- int efd = eventfd(10, 0);
- if (efd == -1)
- handle_error("eventfd");
- int ret = fork();
- if(ret == 0)
- {
- for (int j = 1; j < argc; j++) {
- printf("Child writing %s to efd\n", argv[j]);
- u = atoll(argv[j]);
- ssize_t s = write(efd, &u, sizeof(uint64_t));
- if (s != sizeof(uint64_t))
- handle_error("write");
- }
- printf("Child completed write loop\n");
- exit(EXIT_SUCCESS);
- }
- else
- {
- sleep(2);
- ssize_t s = read(efd, &u, sizeof(uint64_t));
- if (s != sizeof(uint64_t))
- handle_error("read");
- printf("Parent read %llu from efd\n",(unsigned long long)u);
- exit(EXIT_SUCCESS);
- }
- }
比较简单,不做过解释。子进程写入命令行中传入的参数,父进程读取其中计数器的值。
运行结果:
- ./eventfd 10 20 30
- Child writing 10 to efd
- Child writing 20 to efd
- Child writing 30 to efd
- Child completed write loop
- Parent read 70 from efd
命令行传入的是10、20、30其和应为60,为啥读取的是70呢?请看15行调用eventfd时第一个参数是10,这个参数是创建eventfd时初始化计数器的值。
linux新的API signalfd、timerfd、eventfd使用说明——eventfd相关推荐
- linux新的API signalfd、timerfd、eventfd使用说明
三种新的fd加入linux内核的的版本: signalfd:2.6.22 timerfd:2.6.25 eventfd:2.6.22 三种fd的意义: signalfd:传统的处理信号的方式是注册信号 ...
- Pipelines - .NET中的新IO API指引(二)
原文:Pipelines - a guided tour of the new IO API in .NET, part 2 作者:marcgravell 在上一章,我们讨论了以往的StreamAPI ...
- Linux 系统下命令 unrar 的中文版使用说明
查看英文版,猛戳<Linux 系统下命令 unrar 的英文版使用说明> $ rar --help用法: rar <命令> -<选项 1> -<选项 N> ...
- linux线程同步 eventfd,用 eventfd 在线程之间通信
最近有想法把网络库推广成能在线程,同主机进程和不同主机之间的通信的公共中间件.后面两样都可以用 socket. 当然同主机进程也可以用别的,先不想那么多.我要说的线程之间,要实现和 socket 统一 ...
- 用xinnet新网API实现动态域名
最近发现托管的免费动态IP受政策管制.商业收费策略.技术平台稳定性等等,变得非常不稳定.自己正好是新网代理资质,也有API和自己的域名,便尝试使用自己的方案更新域名.这样家里的服务器就能使用FTP,以 ...
- 利用新浪API实现数据的抓取\微博数据爬取\微博爬虫 1
PS:(本人长期出售超大量微博数据.旅游网站评论数据,并提供各种指定数据爬取服务,Message to YuboonaZhang@Yahoo.com.由于微博接口更新后限制增大,这个代码已经不能用来爬 ...
- api.php t.cn,PHP通过调用新浪API生成t.cn格式短网址链接的方法详解
本文实例讲述了PHP通过调用新浪API生成t.cn格式短网址链接的方法.分享给大家供大家参考,具体如下: 新浪提供了长链接转为短链接的API,可以把长链接转为 t.cn/xxx 这种格式的短链接. A ...
- php新浪api,php调用新浪短链接API的方法,php调用新浪api_PHP教程
php调用新浪短链接API的方法,php调用新浪api 本文实例讲述了php调用新浪短链接API的方法.分享给大家供大家参考.具体方法如下: 复制代码 代码如下: //Sina App_Key def ...
- 210314阶段三VS使用Linux 的sqlite3 API
目录 一.学习的知识点 1.聊天系统框架 2.VS使用Linux sqlite3 API 2.1 在项目->属性-> 链接器->命令行 处添加 -lsqlite3 2.2 在 项目- ...
最新文章
- google浏览器插件安装时出错,Package is invalid: CRX HEADER INVALID
- Building and running Node.js for Android
- php https server_使用https,$_SERVER['HTTPS']却不等于on?
- 【Linux 内核】CFS 调度器 ⑥ ( CFS 调度器就绪队列 cfs_rq | Linux 内核调度实体 sched_entity | “ 红黑树 “ 数据结构 rb_root_cached )
- php通过Mysqli和PDO连接mysql数据详解
- 和老婆在MSN上面的涂鸦
- 【转载】js数组的操作
- linux命令行的操作符,Linux shell 比较运算符使用方法教程
- Shell解析curl返回的json数据
- n阶行列式计算Python和C语言实现
- 一个困扰我很久的问题
- js调用原生android应用的方法
- js网页右下角弹窗js特效
- 两路VL53L0X激光测距传感器的使用
- 产生按指数分布的随机数----摘自csdn
- C++中 itoa 和 atoi 的用法
- CS61A fa2021 Composing Programs 2.8 Efficiency 效率
- 有道笔记无法同步(笔录)
- 活动图(Activity Diagram)—UML图(四)
- Linux C/C++ or 嵌入式面试之《C/C++笔面试系列》(2) C语言经典笔面试题(下)
热门文章
- c语言函数大全 chm,【oeasy丨c语言丨函数】C语言库函数使用大全CHM版
- mysql 4 中文模糊查询_解决MySQL中文模糊查询问题
- spring框架中@PostConstruct的实现原理
- 数据库实验四 用户权限管理
- IDEA全文搜索排除无用的文件夹
- matlab 8.4,《DSP using MATLAB》Problem 8.42
- unity2018关联不到vs_现实VS真爱:远嫁的幸福和悲哀
- 字符串截取后两位,字符串转成数组,再转换位字符串
- (JAVA)CollectionDemo1
- ORM是什么?如何理解ORM