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

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

  • 相关阅读:
    学习笔记之C++ How to Program(part)
    Makefile相关资料
    [ZZ]指针Guide
    [ZZ]make命令与makefile文件的写法
    SQLite数据库简介及资源下载
    程序员天生码农命?
    Application标签中有三个事件运行顺序
    Flex 项目案例集锦
    flex简介
    Flex连接数据库三种方法
  • 原文地址:https://www.cnblogs.com/jiaan/p/9565454.html
Copyright © 2011-2022 走看看