参考:http://www.man7.org/linux/man-pages/man2/eventfd.2.html

一、简介

简单来说,这个函数就是创建一个用于事件通知的文件描述符。它类似于pipe,但是不像pipe一样需要两个描述符,它只需要一个描述就可以实现进程间通信了。

详细的介绍请看参考资料。

二、使用

示例:

#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 () int main(int argc, char **argv)
{
int efd, j;
uint64_t u;
ssize_t s; if (argc < )
{
fprintf(stderr, "Usage: %s <num>...\n", argv[]);
exit(EXIT_FAILURE);
} efd = eventfd(, );
if (efd == -)
{
handle_error("eventfd");
} switch (fork())
{
case :
for (j = ; j < argc; j++)
{
printf("Child writing %s to efd\n", argv[j]);
u = strtoull(argv[j], NULL, );
s = write(efd, &u, sizeof(uint64_t));
if (s != sizeof(uint64_t))
{
handle_error("write");
}
}
printf("Child completed write loop\n");
exit(EXIT_SUCCESS);
case -:
handle_error("fork"); default:
sleep(); 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);
}
}

执行结果:

三、疑问

为什么写入这个文件描述符的数字,读取到的居然是它们的和?

明白了,仔细看了一下在该文件描述符上的read、write操作,就理解了,read从该文件描述符读取一个uini64_t类型的整数,write则是把要写入的数字加到已有的整数上。

最新文章

  1. android studio 导入项目太慢(卡条)
  2. yii 常用的多表查询
  3. 跟着百度学PHP[4]-OOP面对对象编程-2-属性和方法
  4. scrollIntoView
  5. Chorme中启动阿里旺旺误点取消启动并记住选择,如何更改。
  6. Linux bash运维操作日志审计(单服务器)
  7. 使用Parallel
  8. Java学习笔记之:Java 流
  9. EntityFramework Code First 优化-IIS 8的第一次优化请求配置
  10. Hadoop作业提交之TaskTracker获取Task
  11. 快速搭建一个Spring Boot + MyBatis的开发框架
  12. IDEA_Springboot启动Tomcat报错_APR
  13. python判断两个变量是否为同一数据类型
  14. 软件测试day1
  15. Monkey脚本API简介
  16. 基于 HTML5 的工业组态高炉炼铁 3D 大屏可视化
  17. 不得不补:PHP的JSON, SQL
  18. Beta阶段冲刺---Day5
  19. jedisClient操作redis实现增删改查功能
  20. DVWA的Xss跨站总结

热门文章

  1. 一步一步学习Swift之(一):关于swift与开发环境配置
  2. Lintcode: Route Between Two Nodes in Graph
  3. linux第12天 线程
  4. WebView自适应屏幕大小
  5. struts不同session范围添加、访问属性
  6. HGE游戏引擎之hgeQuad结构体的使用(用于渲染图片)
  7. origin 8.5 曲线拟合,延长曲线范围
  8. 删除项目中的.svn文件
  9. java总结第四次//常用类
  10. eclipse怎么设置字体大小