linux365投注平台的API详解实例 – Linux-ever

/*************************************************************************
	> File Name: signal.c
	> Author: 
	> Mail: 
	> Created Time: 2015年11月21日 周六 10时21分58秒
 ************************************************************************/

#include 
#include 
#include 
#include 

void sig_handler(int 努姆)
    最后(num) == SIGITT)
        收执 the SIGINT: %d\n", 努姆)
    }
    else if (num) == SIGQUIT){
        printf("recevie the SIGQUIT: %d\n", 努姆)
    }
}

int main()
{
    信号(信号), sig_handler);
    signal(SIGQUIT, sig_handler);

    输入 to the while.\n");
    (1)
        睡卧(1)
    }

    放弃做(0)
}

按Ctrl C发送中途夺取信号。,那就是收回SIGITT信号。;按CTRRL \收回信号。,即发送SIGUDE信号。;
信号应变量是让顺序使分离设置的信号(当FIR,给予一组信号处置应变量(由以第二位限制因素明确提出);
运转最后如次:

最后你想放弃做这么顺序,按CTRL Z促使放弃做,但此刻输入PS。,您可以便笺恰当的运转的顺序并缺乏真正放弃做。,在这点上,咱们必要的扼杀这么换异。;
输入:kill -9 票据的限期号 此后与PS.反省,你可以便笺这么换异公然地屈服死。;

例二:

换异把持块中有64位(0~63)个档案块。,暗示信号的筛保持健康。,就是说,信号筛保持健康字。;每个少量暗示信号的筛保持健康。,
拿 … 来说,最后BIT1是1,暗示SIGIN信号被闭塞。,亦即票据的限期收到SIGINT信号过后无能力的去给予,它守护了信号。,当信号设置为
SIGIT信号仅有的在不闭塞时才被处置。;
这么咱们怎样设置这64个信号的闭塞和非闭塞的保持健康呢???内核做准备了API应变量,
居于首位地步:为SigStIt使明确变量集;
以第二位步:变量的值被重新放置。,sigemptyset(&集中);
第三步:将要设置的信号添加到信号集。,就是说,设置变量。;比方:sigaddset(&set,SIGITT)
四个步:在SET的信号筛保持健康字中登记簿信号集集。;
int sigprocmask(int how, const sigset_t *set, sigset_t OSET;将信号集设置为内核。
西格布死胡同是什么时分,设置要闭塞的信号。;如今是SigyunB拦的时分了。,设置信号为非闭塞。;
SET是咱们公然地使明确的信号集。,OSET可以汇成票据的限期达到目标前一信号筛字的保持健康。;(最后归咎于),设置为空)

在票据的限期把持块外面静止的一信号未决定的保持健康字,它亦64位。,用于区别64个信号。;比方:BIT1设置为1。,暗示已收执到SIGITEN信号。,又
信号被闭塞了。,缺乏被处置;最后BIT1设置为0,暗示SigIt可以抵达并被处置。;

经过应变量sigpending(&pending_集中);来获益票据的限期把持块外面的信号未决定的保持健康字的值;

/*************************************************************************
	> File Name: signal.c
	> Author: 
	> Mail: 
	> Created Time: 2015年11月21日 周六 10时21分58秒
 ************************************************************************/

#include 
#include 
#include 
#include 

void sig_handler(int 努姆)
    最后(num) == SIGITT)
        收执 the SIGINT: %d\n", 努姆)
    }
    else if (num) == SIGQUIT){
        printf("recevie the SIGQUIT: %d\n", 努姆)
    }
}

void print_sig_set(sigset_t * 集中)
{
    int i;

    for (i = 1; i <= 64; ++i){
        if (sigismember(set, i)){
            putchar(''1'');
        }
        else{
            putchar(''0'');
        }
    }
    printf("\n");
}

int main()
{
    
    sigset_t block_set;
    sigset_t pending_set;

    sigemptyset(&block_集中);
    sigaddset(&block_set, SIGITT)

    信号(信号), sig_handler);
    signal(SIGQUIT, sig_handler);

    sigprocmask(SIG_BLOCK, &block_set, 空)
    

    (1)
        sigpending(&pending_集中);
        print_sig_set(&pending_集中);
        睡卧(1)
    }

    放弃做(0)
}

最后是每行64个数字。,这64个数字是票据的限期把持块365投注平台未决定的保持健康字的值;可以便笺,后来,这一切都是0。,当票据的限期收到中途夺取信号SIGINT
过后,待定保持健康字的以第二位位设置为1。,暗示信号SIGITT设置为块。;当票据的限期收执放弃做信号SIGUDE时,,
挂起保持健康字的第三位依然是0位。;

例三:

据我看来收执通道信号。,重新安置SIGIN中途夺取信号的闭塞保持健康。;设置SIGIT为非闭塞。;又这么设置合理的一打交道块。,
拿 ... 来说,可以便笺以下最后。
开端时,信号挂起保持健康的值为0。,当收执到SIGIN中途夺取时,BIT1设置为1。;当再次收执到SIGORT信号时,设置SIGIT为非闭塞。,
在这点上,该换异还显示了Sig退职和SIGITT指出的收执。,同时,未决定的保持健康的少量1设置为0。;当再次收执SIGIN中途夺取时,BIT1依然设置为1。;

/*************************************************************************
	> File Name: signal.c
	> Author: 
	> Mail: 
	> Created Time: 2015年11月21日 周六 10时21分58秒
 ************************************************************************/

#include 
#include 
#include 
#include 

void sig_handler(int 努姆)
    最后(num) == SIGITT)
        收执 the SIGINT: %d\n", 努姆)
    }
    else if (num) == SIGQUIT){
        printf("recevie the SIGQUIT: %d\n", 努姆)
        sigset_t new_set;
        sigaddset(&new_set, SIGITT)

        sigprocmask(SIG_UNBLOCK, &new_set, 空)
    }
}

void print_sig_set(sigset_t * 集中)
{
    int i;

    for (i = 1; i <= 64; ++i){
        if (sigismember(set, i)){
            putchar(''1'');
        }
        else{
            putchar(''0'');
        }
    }
    printf("\n");
}

int main()
{
    
    sigset_t block_set;
    sigset_t pending_set;

    sigemptyset(&block_集中);
    sigaddset(&block_set, SIGITT)

    信号(信号), sig_handler);
    signal(SIGQUIT, sig_handler);

    sigprocmask(SIG_BLOCK, &block_set, 空)
    

    (1)
        sigpending(&pending_集中);
        print_sig_set(&pending_集中);
        睡卧(1)
    }

    放弃做(0)
}

例四:

最后据我看来重新安置SIGIN中途夺取信号的闭塞保持健康。,重新安置主效能;案件如次:

/*************************************************************************
	> File Name: signal.c
	> Author: 
	> Mail: 
	> Created Time: 2015年11月21日 周六 10时21分58秒
 ************************************************************************/

#include 
#include 
#include 
#include 

void sig_handler(int 努姆)
    最后(num) == SIGITT)
        收执 the SIGINT: %d\n", 努姆)
    }
    else if (num) == SIGQUIT){
        printf("recevie the SIGQUIT: %d\n", 努姆)
        sigset_t new_set;
        sigaddset(&new_set, SIGITT)

        sigprocmask(SIG_UNBLOCK, &new_set, 空)
    }
}

void print_sig_set(sigset_t * 集中)
{
    int i;

    for (i = 1; i <= 64; ++i){
        if (sigismember(set, i)){
            putchar(''1'');
        }
        else{
            putchar(''0'');
        }
    }
    printf("\n");
}

int main()
{
    
    sigset_t block_set;
    sigset_t pending_set;

    sigemptyset(&block_集中);
    sigaddset(&block_set, SIGITT)

    信号(信号), sig_handler);
    signal(SIGQUIT, sig_handler);

    sigprocmask(SIG_BLOCK, &block_set, 空)
    
    int time = 10;
    while(time){
        sigpending(&pending_集中);
        print_sig_set(&pending_集中);
        睡卧(1)
        time--;
    }
    printf("first sleep is over.\n");
    
    sigprocmask(SIG_UNBLOCK, &block_set, 空)
    (1)
        sigpending(&pending_集中);
        print_sig_set(&pending_集中);
        睡卧(1)
    }

    放弃做(0)
}

从运转最后可以看出。,前十秒的机遇和例三相等地;当输入居于首位地 sleep is 完毕。暗示完毕10秒。,此后将SIGIN中途夺取信号设置为非闭塞保持健康。,
随后的最后表白,每回中途夺取信号被收执,它被连续的处置。,而归咎于预防。;十秒过后的机遇就和例三不相等地了;

发表评论

电子邮件地址不会被公开。 必填项已用*标注