zoukankan      html  css  js  c++  java
  • linux signal函数遇到的问题

    1.关于signal函数的定义

      signal最开始的原型是这:

      void (*signal(int signo, void (*func)(int)))(int);
    看过下面两行,了解到上面这一行是这个意思,signal(int signo,void (*func)(int))是一个函数,其返回值是 void (*)(int) ,也就是,带一个整型参数的,返回空类型的函数。

      sighandler_t signal(int signum, sighandler_t handler);

      查到的有个这:typedef void (*sighandler_t)(int); 《===》typedef  void (*)(int) sighandler_t;

      

    但是我在Linux环境下这样测试:

           void (*)(int ,char *) p;   

    这样会报错,错误提示是:

    test2.c: In function ‘main’:
    test2.c:14:9: error: expected identifier or ‘(’ before ‘)’ token
    test2.c:15:2: error: ‘p’ undeclared (first use in this function)
    test2.c:15:2: note: each undeclared identifier is reported only once for each function it appears in

    这样   void (*p)(int ,char *) ;   编译会成功。

    2.我在父进程中向子进程发送一个SIGUSER1信号

      第一种情况:我将signal放到fork() 前面,子进程可以进入自定义的信号处理函数

         signal(SIGUSR1,handler_1);
         pid=fork();

      第二种情况:我将signal放到fork() 的后面或者放到pid==0的条件语句中,子进程就进不到自定义的信号处理函数中

    以上几个问题还没有搞明白,希望大神们可以指点

  • 相关阅读:
    名词解释
    cwoa2011项目部署到tomcat服务器(环境搭建及项目的运行)
    上网过程与原理
    C-编译器的实现
    css
    HMTL
    FIRST DAY
    关于面试的吐槽
    我的老大去创业啦
    .Net Core下使用 RSA
  • 原文地址:https://www.cnblogs.com/jiaan/p/9565454.html
Copyright © 2011-2022 走看看