【问题标题】:simple signal code in C, some confusionC中的简单信号代码,有些混乱
【发布时间】:2015-05-01 05:04:31
【问题描述】:

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

  1. 数组int list[] 存储什么?只是处理程序的数量吗?
  2. list[i] = sig 后面的sleep() 是什么意思?
  3. 这段代码的输出应该是什么;我的计算机上没有 Linux。
  4. 函数void Dump() 究竟做了什么?

这里是代码

#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);
}

【问题讨论】:

  • 你应该在你的电脑上安装 Linux(也许在一些虚拟机里)

标签: c linux output signals


【解决方案1】:
  1. 它是一个数组,存储最近处理的 10 个信号,值是对应于信号本身的数字
  2. 它将信号编号添加到数组中,在下一个空闲索引处
  3. 一旦程序接收到SIGTERM 信号,输出应该是已处理信号的列表,其数值对应于SIGUSR1SIGUSR20 之一。
  4. dump() 函数输出存储在列表中的所有信号值

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-20
    • 1970-01-01
    • 1970-01-01
    • 2013-05-27
    • 1970-01-01
    • 2016-05-20
    • 2018-01-06
    相关资源
    最近更新 更多