首页 > 其他分享 >08 异步通知

08 异步通知

时间:2023-03-09 22:11:55浏览次数:51  
标签:异步 struct int 通知 08 cmd fasync kill

第5课.异步通知
代码

编程指南

应用态

  • 在应用态使用signal函数处理
  • 应用态需要打开对应的驱动
  • 将进程ID传递给驱动(getpid)

驱动

  • 记录pid
  • 使能file中f_flags为FASYNC
  • 事件触发时通过kill_fasync发出信号

1. 异步通知原理

应用程序不休眠,不阻塞。事件触发了才会去处理。

驱动程序向应用程序发送信号;常用信号类型SIGIO表示有IO时间触发

引用百问网图片

2. 函数解析

2.1 fcntl

       int fcntl(int fd, int cmd, ... /* arg */ );

fcntl函数有5种功能:

  • 复制一个现有的描述符 (cmd=F_DUPFD)
  • 获得/设置文件描述符标记 (cmd=F_GETFD或F_SETFD).
  • 获得/设置文件状态标记 (cmd=F_GETFL或F_SETFL).
  • 获得/设置异步I/O所有权 (cmd=F_GETOWN或F_SETOWN).
  • 获得/设置记录锁 (cmd=F_GETLK,F_SETLK或F_SETLKW).

2.2 fasync_helper

int fasync_helper(int fd, struct file * filp, int on, struct fasync_struct **fapp)

需要定义一个struct fasync_struct **fapp;用于储存进程传递给文件系统中存起来的pid,并将其存放在struct fasync_struct **fapp ->fa_file中。

当kill_fasync需要寻找进程pid时,可以从中获取

2.3 kill_fasync

void kill_fasync(struct fasync_struct **fp, int sig, int band)

sig		: 信号种类(SIGIO)
band	: 读: 设置为POLL_IN; 写: 设置为POLL_oUT

标签:异步,struct,int,通知,08,cmd,fasync,kill
From: https://www.cnblogs.com/burnk/p/17201684.html

相关文章

  • 路飞-day10——celery执行异步、延迟、定时任务,django中使用celery(秒杀商品功能),轮播图
    目录一、celery执行异步任务,延迟任务,定时任务异步任务延迟任务定时任务二、django中使用celery2.1定时任务推荐使用的框架(了解)2.2秒杀功能2.2.1秒杀功能逻辑分析2.1.2......
  • celery异步执行任务
    celery介绍和安装Celery的作用:-1异步任务-2定时任务-3延迟任务celery的运行原理:1)可以不依赖任何服务器,通过自身命令,启动服务2)celery服务为为其他项目服务提供异......
  • python异步编程asyncio实现协程
    [email protected]():print(1)yieldfromasyncio.sleep(2)print(2)@asyncio.coroutinedeff2():print(3)yieldfromasyncio.s......
  • celery 执行异步任务,延迟任务,定时任务、django中使用celery、轮播图接口加缓存、双写
    目录1celery执行异步任务,延迟任务,定时任务2django中使用celery2.1秒杀功能2.1.1视图2.1.2任务order_task.py2.1.3前端Sckill.vue2.2django中使用celery3轮播图......
  • 分布式事务-最大努力通知2 20230308
          ......
  • 3月08日课后总结
    3/08课后总结绝对导入和相对导入#程序中多个模块之间导入的时候始终以执行文件所在的路径作为基准1.绝对导入: #始终以执行文件所在的环境变量sys.path为基准2.相......
  • Linux运维DAY08
    上周内容: 1.VmwareWorkStition(快照、克隆、网络) 2.Linux目录结构 (每个目录存放是什么类型的文件) 3.Linux路径定位/etc/hostname路径就是对文件定位的一种方......
  • 20230308总结
    总之就是很寄,很寄。T1:想出来前缀和了,但是没想出来怎么优化,于是心态没了,于是就gg了,后面也没想暴力,我很菜。T1可以dfsmndp过nm二分过但是我一个没想出来我很废物......
  • day08 (2023.3.8)
    1.Java虚拟机的内存  2.垃圾回收机制 3.垃圾回收机制总结 4.this关键字  运行结果: 5.static静态的 6.静态初始化块 7.包机制 8.面向对象的三......
  • 3.08今日总结
    今天学习了连接数据库查询功能实现登录功能packagecom.example.helloworld;importstaticandroid.widget.Toast.LENGTH_SHORT;importstaticcom.example.helloworl......