码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 驱动开发6 IO多路复用——epoll


    核心操作:一棵树、一张表、三个接口

    相关案例

    1. #include
    2. #include
    3. #include
    4. #include
    5. #include
    6. #include
    7. #include
    8. #include
    9. #include
    10. #include
    11. #include
    12. /* According to earlier standards */
    13. #include
    14. int main(int argc, char const *argv[])
    15. {
    16. int fd1, fd2, epfd;
    17. struct epoll_event event; // 用于操作epoll
    18. struct epoll_event events[10]; // 存放就绪事件描述符的数组
    19. char buf[128] = {0};
    20. // 创建epoll句柄
    21. epfd = epoll_create(1);
    22. if (epfd < 0)
    23. {
    24. printf("epoll_create filed\n");
    25. exit(-1);
    26. }
    27. // 打开设备文件
    28. fd1 = open("/dev/input/mouse0", O_RDWR);
    29. if (fd1 < 0)
    30. {
    31. printf("打开鼠标设备文件失败\n");
    32. exit(-1);
    33. }
    34. fd2 = open("/dev/mycdev0", O_RDWR);
    35. if (fd2 < 0)
    36. {
    37. printf("打开鼠标设备文件失败\n");
    38. exit(-1);
    39. }
    40. // 添加准备就绪事件进入epoll;
    41. event.events = EPOLLIN; // 读事件
    42. event.data.fd = fd1;
    43. if (epoll_ctl(epfd, EPOLL_CTL_ADD, fd1, &event) < 0)
    44. {
    45. printf("epoll_ctl add filed\n");
    46. }
    47. event.events = EPOLLIN; // 读事件
    48. event.data.fd = fd2;
    49. if (epoll_ctl(epfd, EPOLL_CTL_ADD, fd2, &event) < 0)
    50. {
    51. printf("epoll_ctl add filed\n");
    52. }
    53. // 监听事件是否发生
    54. while (1)
    55. {
    56. // 如果成功,ret接收返回的事件个数,把就绪的事件放在events数组中
    57. int ret = epoll_wait(epfd, events, 10, -1);
    58. if (ret < 0)
    59. {
    60. printf("epoll_wait filed\n");
    61. exit(-1);
    62. }
    63. int i;
    64. // 循环遍历数组,做事件的处理
    65. for (i = 0; i < ret; i++)
    66. {
    67. if (events[i].events & EPOLLIN)//判断发生的事件是不是读事件
    68. {
    69. read(events[i].data.fd, buf, sizeof(buf));
    70. printf("buf:%s\n", buf);
    71. }
    72. }
    73. }
    74. close(fd1);
    75. close(fd2);
    76. return 0;
    77. }

    效果呈现

  • 相关阅读:
    如何取消Blazor Server烦人的重新连接?
    GsonUtils和字符串
    蓝桥杯小白算法赛 第七场 2.霓虹(二维数组)
    Linux和window查找对应程序或进程,并杀死进程方法
    JavaEE——进程调度
    单目标应用:基于白鲨优化算法(WSO)优化极限学习机(ELM)的数据预测(ELM隐藏层神经元可修改,提供MATLAB代码)
    Linux常见问题解决操作(yum被占用、lsb无此命令、Linux开机进入命令界面等)
    ThrowableError in Arr.php line 380
    序列到序列学习(seq2seq)
    MASA Framework - DDD设计(1)
  • 原文地址:https://blog.csdn.net/Smallxu_/article/details/134063117
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号