C中的简单信号代码,有些混乱
simple signal code in C, some confusion
这里是一些简单的 C 信号代码。我对这段代码背后的概念有几个问题。我的电脑上没有 Linux,所以请考虑向我解释这段代码背后的概念;非常感谢!
- 数组
int list[]
存储什么?它只是处理程序的数量吗?
sleep()
后面的list[i] = sig
是什么意思?
- 这段代码的输出应该是什么;我的电脑上没有 Linux。
- 函数
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);
}
- 这是一个数组,存储了最近处理的10个信号,值为信号本身对应的数字
- 它正在将信号编号添加到数组,在下一个空闲索引处
- 输出应该是已处理信号的列表,一旦
SIGTERM
信号,对应于 SIGUSR1
、SIGUSR2
或 0
之一的数值被程序接收到。
dump()
函数输出存储在列表中的所有信号值
这里是一些简单的 C 信号代码。我对这段代码背后的概念有几个问题。我的电脑上没有 Linux,所以请考虑向我解释这段代码背后的概念;非常感谢!
- 数组
int list[]
存储什么?它只是处理程序的数量吗? sleep()
后面的list[i] = sig
是什么意思?- 这段代码的输出应该是什么;我的电脑上没有 Linux。
- 函数
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);
}
- 这是一个数组,存储了最近处理的10个信号,值为信号本身对应的数字
- 它正在将信号编号添加到数组,在下一个空闲索引处
- 输出应该是已处理信号的列表,一旦
SIGTERM
信号,对应于SIGUSR1
、SIGUSR2
或0
之一的数值被程序接收到。 dump()
函数输出存储在列表中的所有信号值