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);
    }



        
  • 相关阅读:
    oracle登陆认证方式
    oracle用户管理
    oracle sqlplus常用命令
    瀑布开发模式和敏捷开发模式
    在C#中用RX库和await来实现直观的状态机
    C#实现简单的字符串加密
    双屏办公之体会
    利用json2csharp快速生成C#类
    .Net中的插件框架Managed Extensibility Framework
    解决NVidia显卡最大化和最小化窗口时的卡顿问题
  • 原文地址:https://www.cnblogs.com/autoria/p/5963158.html
Copyright © 2011-2022 走看看