美文网首页
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