我是靠谱客的博主 无聊服饰,最近开发中收集的这篇文章主要介绍fasync简介,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

 fasync是指应用于系统调用signal和sigaction函数的中断机制。

简单的说,signal函数就是让一个信号与一个函数对应,每当接收到这个信号就会调用相应的函数。

那么什么是异步通知?异步通知类似于中断的机制,当设备可写时,设备驱动函数发送一个信号给内核,告知内核有数据可读,在条件不满足之前,并不会造成阻塞。而不像之前学的阻塞型IO和poll,它们是调用函数进去检查,条件不满足时还会造成阻塞。

使用方式:

其实在应用层启用异步通知只三个步骤:

1)signal(SIGIO, sig_handler);

调用signal函数,让指定的信号SIGIO与处理函数sig_handler对应。

2)fcntl(fd, F_SET_OWNER, getpid());

指定一个进程作为文件的“属主(filp->owner)”,这样内核才知道信号要发给哪个进程。

3)f_flags = fcntl(fd, F_GETFL);

fcntl(fd, F_SETFL, f_flags | FASYNC);

在设备文件中添加FASYNC标志,驱动中就会调用将要实现的test_fasync函数。

三个步骤执行后,一旦有信号产生,相应的进程就会收到。

linux ——信号简介

1.  定义
    简而言之,信号是一种软件中断,提供了一种处理异步的方法,信号发生是随机的。例如键盘输入中断按键(^C),它的发生在程序执行过程中是不可预测的。
    硬件异常也能产生信号,例如被零除、无效内存引用(test里产生的就是这种错误)等。这些条件通常先由内核硬件检测到,然后通知内核。内核将决定产生什么样的信号。
    同一个信号的额外发生通常不会被排队。如果信号在被阻塞时发生了5次,当我们反阻塞这个信号时,这个信号的信号处理函数通常只被调用一次。
    同一时刻只能处理一个信号,在信号处理函数发信号给自己时,该信号会被pending。
    信号的数值越小,则优先级越高。当进程收到多个待处理信号时,总是先处理优先级别高的信号。
    信号处理函数的栈可以使用被中断的也可以使用独立的,具体可以通过系统调用设置。
2.  处理方式
    忽略:接收到信号后不做任何反应。
    捕获:用自定义的信号处理函数来执行特定的动作。
    默认:接收到信号后按系统默认的行为处理该信号。
            这是多数应用采取的处理方式。

参考:

fasync_百度百科    信号_兰宝的专栏-CSDN博客

最后

以上就是无聊服饰为你收集整理的fasync简介的全部内容,希望文章能够帮你解决fasync简介所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部