美文网首页
linux系统编程-1

linux系统编程-1

作者: 不懂球的2大业 | 来源:发表于2020-06-12 14:23 被阅读0次

1.可重入函数

  • 概念:第一次调用还没结束,就发生第二次调用,结果还不出错。
  • 所有的系统调用都是可重入的,一部分标准库函数也是可重入的,eg:memcpy,rand()函数是不可重入的(在上次德基础上计算一个随机值),而rand_r()是可重入的。

2.信号的响应过程

  • 内核为每个进程维护了2个位图:mask和pending(理论上32位)。
  • mask一般都是1,pending一般都是0
  • 如何忽略掉一个信号?标准信号,为什么会丢失?
  • 信号来时,对应的pending位置为1,中断打断,然后进入内核态,排队调度。从内核态返回用户态时,mask与pending按位与,发现信号,响应的时候mask与pending置为0(若此时信号又来了,则pending又被置为1,若来了很多次,也是置为1,不会计数),执行处理函数,返回内核,将mask位置为1,再做一次按位与。因此:信号从收到到响应,有一个不可避免的延迟。
  • 标准信号的响应没有严格的顺序
  • 若mask位置为0,则永远无法响应信号。

3.常用函数

  • kill()函数。
  • rsise()函数。
  • alarm()函数:
\\ alarm.c
#include <stdio.h>
#include <stdlib.h>

int main(){
    alarm(5);
    while(1);
    exit(1);
}
\\ alarm2.c
#include <stdio.h>
#include <stdlib.h>

int main(){
    alarm(10);
    alarm(1);
    alarm(5);
    while(1);
    exit(1);
}
  • alarm()无法实现多个计时。
  • pause()函数:alarm函数cpu满占,盲等。pause()不会盲等。
\\ pause.c
#include <stdio.h>
#include <stdlib.h>

int main(){
    alarm(10);
    alarm(1);
    alarm(5);
    while(1)
        pause();
}
  • sleep 可能由pause()和alarm()来实现。
  • 66集

相关文章

网友评论

      本文标题:linux系统编程-1

      本文链接:https://www.haomeiwen.com/subject/rqmgtktx.html