C中的简单信号代码,有些混乱

时间:2015-05-01 05:04:32

标签: c linux output signals

所以这里是C中的一些简单信号代码。我对这段代码背后的概念只有几个问题。我的计算机上没有Linux,所以请考虑向我解释这个代码背后的概念;我真的很感激!

  1. 数组int list[]存储什么?它只是处理程序的数量吗?
  2. list[i] = sig之后的sleep()是什么意思?
  3. 此代码的输出应该是什么;我的电脑上没有Linux。
  4. 函数void Dump()到底做了什么?
  5. 这是代码

    #include <unistd.h>
    #include <stdio.h>
    #include <signal.h>
    
    int list[10] = {0,0,0,0,0,0,0,0,0,0};
    void handler(int sig) {
      int i = 0;
      while(list[i]!=0) { i++;}
      sleep(10);
      list[i] = sig;
      write(1, "Outta here\n" , 11) ;
    }
    void dump(int sig) {
      int i;
      for (i=0; i<10; i++) {
        printf("list[%d]=%d\n" , i, list[i]);
      }
      _exit(0);
    }
    main( ) {
      signal(SIGUSR1, handler);
      signal(SIGUSR2, handler) ;
      signal(SIGTERM, dump);
      printf("Handlers installed\n");
      while (1);
    }
    

1 个答案:

答案 0 :(得分:2)

  1. 它是一个存储最后10个信号的数组,值是与信号本身对应的数字
  2. 在下一个免费索引
  3. 中将信号编号添加到数组中
  4. 一旦收到SIGUSR1信号,输出应为处理信号列表,数字值对应SIGUSR20SIGTERM之一通过该计划。
  5. dump()函数输出列表中存储的所有信号值