您的位置:首页 > 游戏 > 游戏 > 网页设计与制作自考真题_一般通过_百度目前的推广方法_站长工具是干嘛的

网页设计与制作自考真题_一般通过_百度目前的推广方法_站长工具是干嘛的

2024/12/23 15:13:48 来源:https://blog.csdn.net/hejinjing_tom_com/article/details/143594542  浏览:    关键词:网页设计与制作自考真题_一般通过_百度目前的推广方法_站长工具是干嘛的
网页设计与制作自考真题_一般通过_百度目前的推广方法_站长工具是干嘛的

---------------------------------------------------
author:      hjjdebug
date:        2024年 11月 07日 星期四 14:47:33 CST
description: linux 下 signal() 函数的用法
---------------------------------------------------

signal 是linux 下最基础的进程通讯机制.
signal 是一种信号, 
信号的类型分系统类型<32 和实时类型>=32
进程收到一种信号时,就会对该信号做出响应,这个响应函数是一个无返回值的函数.

专业说法是信号处理函数:
定义__sighandler_t 是一种无返回值的函数
typedef void (*__sighandler_t)( int );

定义signal 函数有2个输入参数,一个输出参数
__sighandler_t signal(int signum,__sighandler_t handler);
输入参数: 一个信号类型,一个信号处理函数, 返回上一次的信号处理函数.

你可以用signal 函数重置除SIGKILL, SIGSTOP 外的所有信号处理函数.


描述:
1. 第一个参数signum描述了信号类型, signum的宏定义在哪里?
 这可以用gcc 的 -E -dD 宏来查看到,为
 "/usr/include/x86_64-linux-gnu/bits/signum-generic.h"
 可以看到31个系统信号定义

   

2. 第二个参数handler描述了与信号关联的动作,它可以取以下三种值:
  a. 信号处理函数, 一个无返回值的函数地址,用户自定义函数, 
  b. SIG_IGN  ; 其作用是忽略该信号
    实现:
    #define SIG_IGN ((__sighandler_t) 1)
  c. SIG_DFL  ; 其作用是把该信号处理函数恢复到默认

例子:
#include <signal.h>
    
static void sighandler(int sig_no)
{
    printf("\nsig_no:%d\n",sig_no);
    // 可以添加自己的东西,例如打印函数调用栈等
    exit(1);  
}

int main(void)
{
    signal(SIGINT,sighandler);
    signal(SIGTERM,SIG_IGN);    // 忽略信号的用法
    signal(SIGUSR1,sighandler); // signal 10
    ....
}

除了signal函数,还可以调用sigaction函数, 它的功能更强.
sigaction的信号处理函数不仅携带了信号类型,而且还包含其它信息.如发出信号时的执行地址等。
这里就不详细展开了.

对于宏的操作, 可通过预处理命令查看.
看定义可以用-dU,          特点,不给出在哪里定义,即预处理不显示宏定义,但在使用时直接给出了定义.并展开.
看在哪里定义可以用-dD,    特点, 预处理文件展开时展示了宏定义,因而可知道在哪里定义的,但在使用点直接展开了.
两者配合可完美解决问题.

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com