尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

linux多进程通讯---信号新增API eventfd

linux多进程通讯---信号新增API eventfd
📅 发布时间:2026/7/28 19:44:52

文章目录

      • API说明
      • 举例

API说明

•eventfd API •int eventfd(unsigned int initval, int flags); –用来创建一个用于事件通知的eventfd对象 –返回值为一个int型fd,用来引用打开的对象 –打开的对象在内核中是一个64位的无符号整型计数器,初始化为initval –计数器数据类型:typedef uint64_t eventfd_t •flags: –EFD_CLOEXEC:类似于open的flags,fork子进程时不继承 –EFD_NONBLOCK:一般会设置成非阻塞 –EFD_SEMAPHORE:信号量语义的read,每次读操作,计时器值减1 •内核实现:fs/eventfd.c

举例

#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[]) { int fd_event, j; uint64_t u; ssize_t s; if (argc < 2) { fprintf (stderr, "Usage: %s <num>...\n", argv[0]); exit (EXIT_FAILURE); } fd_event = eventfd(0, EFD_SEMAPHORE); if (fd_event == -1) handle_error ("eventfd"); switch (fork()) { case 0: sleep (1); for (j = 1; j < argc; j++) { printf ("Child writing %s to fd_event\n", argv[j]); u = strtoull (argv[j], NULL, 0); /* strtoull() allows various bases */ s = write (fd_event, &u, sizeof(uint64_t)); if (s != sizeof(uint64_t)) handle_error ("write"); } printf ("Child completed write loop\n"); exit (EXIT_SUCCESS); default: // sleep (2); printf ("Parent about to read\n"); s = read (fd_event, &u, sizeof(uint64_t)); if (s != sizeof(uint64_t)) handle_error ("read"); printf ("Parent read %llu (0x%llx) from fd_event\n", (unsigned long long) u, (unsigned long long) u); s = read (fd_event, &u, sizeof(uint64_t)); if (s != sizeof(uint64_t)) handle_error ("read"); printf ("Parent read %llu (0x%llx) from fd_event\n", (unsigned long long) u, (unsigned long long) u); s = read (fd_event, &u, sizeof(uint64_t)); if (s != sizeof(uint64_t)) handle_error ("read"); printf ("Parent read %llu (0x%llx) from fd_event\n", (unsigned long long) u, (unsigned long long) u); exit (EXIT_SUCCESS); case -1: handle_error ("fork"); } } // ./a.out 1 2 3 4 5 6 7 8 9

相关新闻

  • TPIC7710EVM评估板:汽车电子电机驱动ASIC的硬件设计与软件实战指南
  • MediaCrawler:用 CDP 模式绕开 JS 逆向的多平台社媒爬虫深度解析
  • js那些忽视的知识点

最新新闻

  • OpenAI Codex CLI 十大核心技能配置指南:从代码生成器到专业开发助手
  • 3步解锁碧蓝航线全皮肤:Perseus原生库配置终极指南
  • 终极指南:uBlock Origin如何成为浏览器隐私保护的最佳解决方案
  • VMware虚拟机导致宿主机蓝屏:从原理到排查的完整指南
  • 社交娱乐AI智能体开发:核心技术与实践指南
  • 2026 年更新:舒兰口碑好的回收光伏电缆实力厂家哪家专业,别让旧光伏电缆成废铜烂铁,这才是让它变废为宝的正确打开方式-润东废旧物资回收 - 行业推荐【认证官】

日新闻

  • 力旷智能:伺服驱动系统在制药收瓶设备中的应用解析
  • 2026 网安入门避坑指南,零基础如何避开无效学习直接上手实战
  • 揭秘CFC项目:如何通过手机摄像头实现850kbps无网络文件传输

周新闻

  • 大连理工大学与东京大学联手打造的“主动型AI助手“
  • 170.2026年国家级科研瓶颈:超精密单点金刚石切削(SPDT)光学表面生成
  • SongBloom:革命性歌曲生成框架深度解析——如何通过交织自回归与扩散模型创作完整音乐

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号