加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
    • 博天堂918网址体育真人
    • 博天堂918网址网页版
    • botiantang注册网站
    • botiantang注册开户
  • 博天堂918网址老虎机
  • 博天堂918网址彩票
  • 博天堂918网址体育真人
申请入驻 产业图谱

botiantang官网平台 澳门星河娱乐APP的异步通知接收中要注意使能顺序

2023/02/17
1778
阅读需 6 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

异步通知是一种通知,相当于用于应用程序的中断。可用于驱动通知进程,也可以进程通知进程。

博天堂918网址体育真人

botiantang最新网址

默认的异步IO信号是SIGIO,使用这个信号的接收程序如下:

...
static void signal_handler(int sig)
{
...
}
...int fd,oflags;

 
fd = open(xxx, xxx);
 
if(fd != -1){
signal(SIGIO,signal_handler); fcntl(fd,F_SETOWN,getpid()); oflags = fcntl(fd,F_GETFL);
fcntl(fd,F_SETFL,oflags|FASYNC);
...
}
...

signal_handler 是通知要运行的函数;

signal(SIGIO,signal_handler); 是注册信号对应的函数

fcntl(fd,F_SETOWN,getpid());    这句是设置异步通知要通知给谁

oflags = fcntl(fd,F_GETFL);

fcntl(fd,F_SETFL,oflags|FASYNC);  这两句是使能异步通知。

重点就是使能这部要放在最后。原因如下:如果使能放在前面,异步通知发生在使能之后,注册信号函数之前的话。由于找不到注册函数,系统会执行默认处理函数。就是会将进程终止。这样就发生故障,与预期不符。

博天堂918网址网页版

实时信号就是更换默认信号SIGIO为实时信号。默认信号SIGIO有些缺点,不支持排队,在信号处理函数进行过程中如果来了多次SIGIO信号的话会被忽略的。实时信号有很多,SIGRTMIN~SIGRTMAX的都是实时信号。

botiantangapp下载中心

...
static void test_handler(int sig, siginfo_t *info, void *context)
...
struct sigaction test;
int flag;fd = open(xxx,xxx);

test.sa_sigaction = test_handler;
test.sa_flags = SA_SIGINFO;
sigemptyset(&test.sa_mask);
sigaction(SIGRTMIN, &test, NULL);

fcntl(fd, F_SETOWN, getpid());

fcntl(fd, F_SETSIG, SIGRTMIN);

oflags = fcntl(fd,F_GETFL);
fcntl(fd,F_SETFL,oflags|FASYNC);

 

test_handler是通知要运行的函数;

sigaction(SIGRTMIN, &test, NULL);   是注册信号对应的函数

fcntl(fd,F_SETOWN,getpid());    这句是设置异步通知要通知给谁

fcntl(fd, F_SETSIG, SIGRTMIN);   是设置异步通知使用的信号是什么

oflags = fcntl(fd,F_GETFL);

fcntl(fd,F_SETFL,oflags|FASYNC);   这两句是使能异步通知。

重点如上,使能放在最后。

botiantang注册网站

botiantang注册网站分为两种,进程向进程发送和botiantang注册开户。

进程向进程发送

这个比较简单,使用kill函数就可以。

#include
#include
int kill(pid_t pid, int sig);

kill的函数pid是正数的时候是目标的进程,负数分几种情况可以查阅相关资料。

botiantang注册开户

博天堂918网址老虎机

1 编写驱动得fasync函数,这个函数里要包括fasync_helper,注册异步通知

2 在需要发送异步通知的位置,先判断异步通知申请成功并可以获得进程号,然后使用kill_fasync发送通知

博天堂918网址老虎机

更多器件
器件型号 数量 器件厂商 器件描述 数据手册 ECAD模型 风险等级 参考价格 更多信息
CSTLS3M58G53093-B0 1 Murata Manufacturing Co Ltd Ceramic Resonator,
$1.71 查看
TLP293-4(GB-TP,E(T 1 Toshiba America Electronic Components Transistor Output Optocoupler, 4-Element, 3750V Isolation

ECAD模型

下载ECAD模型
$2.77 查看
AFBR-2521CZ 1 Broadcom Limited Receiver, Through Hole Mount,

ECAD模型

下载ECAD模型
$16.81 查看

博天堂918网址彩票

博天堂918网址体育真人