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的条件语句中,子进程就进不到自定义的信号处理函数中

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

 

posted on 2018-08-31 13:59  子都  阅读(617)  评论(0编辑  收藏  举报