异步 IO

本文介绍了Linux中的IO分类,包括阻塞、非阻塞、IO复用和异步IO。重点讲解了异步IO,特别是信号驱动的IO实现,涉及结构体中的异步指针、fasync()函数、资源获取时的信号释放以及文件关闭时的处理。同时,文章还提到了SIGIO和SIGINT等关键信号,并提供了信号实例和异步IO的测试程序。
摘要由CSDN通过智能技术生成

IO分类

  1. 阻塞IO
  2. 非阻塞IO
  3. IO复用(select)
  4. 异步IO(信号驱动的IO)

IO类型

1、异步通知:一旦设备就绪,则主动通知应用程序。异步通知意味则设备通知自身可访问,实现了异步I/O.由内核向应用程序发信号,类似中断。
2、阻塞I/O意味着一直等待设备可访问后再访问。
3、非阻塞IO,设备不可访问,则马上返回。
4、轮询I/O,使用poll()查询设备是否可访问。

Linux 中最为常见信号的含义及其默认操作,详见Linux信号列表.pdf。

在这里插入图片描述

重点关注的信号:

  • SIGIO 键盘输入或者当文件可读、写
  • SIGINT 终端中断 ctrl+c
  • SIGQUIT 终端退出 ctrl+\

信号实例一

#include <signal.h>
#include <stdio.h>

#include <stdlib.h>
/*自定义信号处理函数*/
void my_func(int sign_no)
{
   
    if(sign_no==SIGINT)
    printf("I have get SIGINT\n");
    else if(sign_no==SIGQUIT)
    printf("I have get SIGQUIT\n");
}
int main()
{
   
	printf("Waiting for signal SIGINT or SIGQUIT \n ");
	/*发出相应的信号,并跳转到信号处理函数处*/
	signal(SIGINT, my_func);
	signal(SIGQUIT, my_func);
	while(1);
}

<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值