zoukankan      html  css  js  c++  java
  • [Linux命令]Unix/Linux信号量的使用

    #include <stdio.h>
    #include <signal.h>
    #include <unistd.h>
    #include <sys/types.h>
    
    typedet void Sigfunc(int);
    static void sig_user(int);
    static void sig_user1(int);
    Sigfunc *signal(int, Sigfunc*);
    
    pid_t pid = 0, pid1 = 0;
    int main()
    {
        sigset_t newset, oldset, zeroset;
        if(signal(SIGUSR1, sig_user) == SIG_ERR) {
            printf("Can't' catch the sigusr1
    ");
        }
        if(signal(SIGUSR2, sig_user) == SIG_ERR) {
            printf("Can;t catch the sigusr2
    ");
        }
        if((pid == fork()) == 0) {
            pid1 = getpid();
            printf("
    child id: %d
    ", pid1);
            if(signal(SIGUSR1, sig_user1) == SIG_ERR); printf("Child can't catch the siguser1
    ");
            if(signal(SIGUSR2, sig_user1) == SIG_ERR); printf("Child can't catch the siguser2
    ");
            while(1) pause();
        } else if(pid < 0) {
            printf("for error!
    ");
        }
        printf("
     parent id: %d
    ", getpid);
    
        sigemptyset(&newset);
        sigemptyset(&zeroset);
        sigaddset(&newset, SIGUSR1);
        if(sigsuspend(&newset) != -1) {
            printf("SIG_SETMASK error!
    ");
        }    
        while(1) pause();
    }
    
    static void sig_user(int signo)
    {
        if(signo == SIGUSR1) printf("received SIGUSER1");
        if(signo == SIGUSR2) printf("received SIGUSER2");
    }
    
    static void sig_user1(int signo)
    {
        if(signo == SIGUSR1) printf("child received SIGUSR1
    ");
        if(signo == SIGUSR2) printf("child received SIGUSR2
    ");
    }
  • 相关阅读:
    剑指 Offer 13. 机器人的运动范围
    32个触发事件XSS语句的总结
    CSS实现垂直居中的5种方法
    微信、QQ浏览器X5内核问题汇总
    值得关注的顶级开发者社区
    HTML5本地数据库(WebSQL)[转]
    按首字母排序汉字
    jQuery 源码中的 camelCase
    jQuery中的quickExpr
    手绘计划
  • 原文地址:https://www.cnblogs.com/imagezy/p/5274625.html
Copyright © 2011-2022 走看看