zoukankan      html  css  js  c++  java
  • unix网络编程

    先来考虑信号处理
    int sigaction(int
    signum, const struct sigaction *act, struct sigaction *oldact
    );

    该函数用来修改收到一个信号时的处理方式。
    参数act用来指定新处理方式,oldact用来保存先前的处理方式。

    处理方式保存在一个结构中
    struct sigaction {
                   void     (*sa_handler)(int);
                   void     (*sa_sigaction)(int, siginfo_t *, void *);
                   sigset_t   sa_mask;
                   int        sa_flags;
                   void     (*sa_restorer)(void);
               };
    其中sa_handler, sa_mask, sa_falgs比较常用,sa_handler指向处理函数, sa_mask用于设置阻塞,sa_flags用于修改信号的行为。
    sa_mask是一个位向量掩码(在实现I/O mutiplexing的select函数中也有位向量掩码)
    1 //阻塞设置的demo
    2 sigemptyset(&mask);
    3 sigaddset(&mask, SIGCHLD);
    4 sigprocmask(SIG_BLOCK, &mask, NULL);

    回到sigaction结构体的设置

    //结构体设置demo.  from: <csapp>/p517/fig8.34
    handler_t *Signal(int signum, handler_t *handler)
    {
        struct sigaction action, old_action;
        sigemptyset(&action.sa_mask);    //Block sigs of type being handled
        action.sa_flags = SE_RESTART;     //Restart syscalls if possible
    
        if (sigaction(signum, &action, &old_action) < 0)
            unix_error("Signal error");
        return (old_acion.sa_handler);
    }    
    //结构体设置demo2. from beej
    struct sigaction sa;
    ....
    sa.sa_handler = sigchld_handler;
    sigemptyset(&sa.sa_mask);
    sa.sa_flags = SA_RESTART;
    
    if (sigaction(SIGCHLD, &sa, NULL) == -1) {
        ...
        exit(1);
    }



        
  • 相关阅读:
    数组
    做了个进制转换图
    类的练习
    3.10l练习
    c#学习第二课
    c#第四课习题
    c#学习第三课
    学习PHP&MYSQL之——字符编码篇(一)
    中缀表达式转换成后缀表达式
    模板方法模式(Template Pattern)
  • 原文地址:https://www.cnblogs.com/autoria/p/5963158.html
Copyright © 2011-2022 走看看