内核向应用层异步通知的方法,kill_fasync及fasync_helper用法

本文介绍了在字符设备驱动中如何使用kill_fasync和fasync_helper进行异步通知。在驱动的中断处理函数中,当满足条件时,通过kill_fasync向应用层发送SIGIO信号,触发用户层的input_handler函数进行响应。用户层则通过设置FASYNC标志并注册信号处理函数来接收驱动的异步通知。
摘要由CSDN通过智能技术生成
kill_fasync及fasync_helper用于异步通知中
kill_fasync(&fasync_read, SIGIO, POLL_IN);; //向用户发可读信号,fasync_read可用来区分向谁发
哪个进程调用这个fasync_helper就向谁发
int fasync_helper(int fd, struct file * filp, int on, struct fasync_struct **fapp)
{
    struct fasync_struct *fa, **fp;
    struct fasync_struct *new = NULL;
    int result = 0;

    if (on) {
        new = kmem_cache_alloc(fasync_cache, GFP_KERNEL);
        if (!new)
            return -ENOMEM;
    }
    write_lock_irq(&fasync_lock);
    for (fp = fapp; (fa = *fp) != NULL; fp =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值