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

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

  • 相关阅读:
    paste 合并文件
    split 分割文件
    cut 从文本中提取一段文字并输出
    tailf 跟踪日志文件
    tail 显示文件内容尾部
    给Linux系统新增加一块硬盘
    Centos7+httpd+fastcgi安装提示错误
    Redhat 7使用CentOS 7的Yum网络源
    windows7下cmd窗口使用ssh命令
    PHP set_error_handler() 函数
  • 原文地址:https://www.cnblogs.com/jiaan/p/9565454.html
Copyright © 2011-2022 走看看