• UNIX C 信号


    1.信号处理

    #include <signal.h>
    
    typedef void(*sighander_t)(int);
    
    sighander_t signal(int signum,sighander_t hander)
    成功返回原信号处理方式,失败返回SIGERR

    --signum :信号编号
    --hander: 信号处理方式
        SIG_IGN:忽略信号
        SIG_DFL:默认操作
        信号处理函数指针 -捕获信号

    2.信号处理函数

    void sighander(int signum)
    {
       信号处理代码;     
    }

    3.调用函数发送信号

      杀死进程信号

    #include <signal.h>
    
    int kill (pid_t pid,int signum);
        
      成功发送信号并返回0,失败-1

      

      向调用进程发送信号

    #include <signal.h>
    
    int raise(int signum);
    
    raise函数是向调用进程发送信号
    对单线程程序来说,相当于
        kill(getpid,signum);
    对多线程程序来说,相当于
        pthread_kill(pthread_self,signum);

    4.暂停

    #include <unistd.h>
    
    int pause(void);
    该函数无时限睡眠,只到收到信号发生,改变自身状态
    成功阻塞,失败-1;

    5.睡眠

      sleep(seconds)  

    #include <unistd.h>
    
    unsigned int sleep(unsigned int seconds);
    
    返回0或剩余秒数
    
    该函数调用进(线)程睡眠seconds秒,除非信号打破这种状态

      

      usleep

    #include <unistd.h>
    
     int usleep(usecond_t usec);
    
    --usec 微秒
    成功返回0,失败 -1

    6.闹钟

      alarm

    #include <unistd.h>
    
    unsigned int alarm(unsigned int  seconds);
    
    返回剩余秒数

     7.信号集

      填满信号集

    #include <signal.h>
    
    int sigfillset(sigset_t* sigset);
    
    --sigset :信号集

      

      清空信号集

    #include <signal.h>
    
    int sigemptyset(sigset_t* sigset);
    
    成功0,失败-1

      

      加入信号

    #include <signal.h>
    
    int sigaddset(sigset_t* sigset,int signum);
    
    成功0,失败-1
    
    --sigset :信号集
    --signum:信号编号

      

      删除信号

    #include <signal.h>
    
    int sigdelete(sigset_t* sigset,int signum);
    
    成功0,失败-1

      

      判断信号是否在信号集中

    #include <signal.h>
    
    sigismember(const sigset_t* sigset,int signum);
    
    有返回1,没有0,失败-1

     8.信号屏蔽

      信号掩码

    #include <signal.h>
    
    int sigprocmask(int  how,const sigest_t* sigset,sigset_t* oldsigset);
    
    --how有一下取值
    SIG_BLOCK  将sigset信号加入当前信号掩码
    SIG_UNBLOCK 从当前信号掩码中删除sigset信号
    SIG_SETMASK  sigset设置当前信号掩码

      获取调用进程的未决信号

    #include <signal.h>
    
    int sigpending(sigset_t* sigset);
    
    成功返回0,失败返回-1
    
    输出未决信号集 sigset

    9.定时器

      

    #include <sys/time.h>
    
    int setitimer(int which,
        const struct itimerval* new_value,
        struct itimercal* old value);
    
    成功返回0,失败返回-1
    
    --which有下面取值
        ITIMER_REAL  真实定时器
        ITIMER_VIRTUAL 虚拟定时器    
        ITIMER_PROF    实用定时器
    
    struct itimerval{
       //重复间隔,取0发送一个信号后,停止
       struct timerval it_interval;
       //初始间隔,取0立即停止计时器
       struct timerval it_value;
    };
    
    struct timerval{
        long tv_sec;
        long tv_usec;
    };

    10.管道

      mkfifo  myfifo //创建有名管道

      

    #include <sys/stat.h>
    
    int mkfifo(const char* pathname,
        mode_t mode);
    
    --pathname :文件路径
    --mode:权限模式

      无名管道--   用于父子进程通信

    #include <unistd.h>
    
    int pipe(int pipefd[2]);
    
    成功0,失败-1
    
    pipefd:输出两个文件描述符
    
    pipefd[0]: 无名管道读取数据端
    pipefd[1]:无名管道写入数据端
  • 相关阅读:
    CentOS 6.4下Squid代理服务器的安装与配置
    从C++到objectivec[转]
    在Objectivec里面使用property教程【转】
    Socket常用的数据结构【转】
    iOS 5 Storyboard 学习之 Tabbar Controller,Navigation Controller (1)
    Linux Socket编程(不限Linux)
    重要的套接字函数[转]
    HTTP,TCP/IP
    网络编程socket之bind函数[转]
    linux 下遍历目录中的目录项
  • 原文地址:https://www.cnblogs.com/Kernel001/p/7808640.html
Copyright © 2020-2023  润新知