C:信号功能(参数?)

C:信号功能(参数?),c,signals,C,Signals,我有以下c代码: void handler(int n) { printf("n value: %i\n"); } int main() { signal(SIGTSTP, handler); // ^Z at keyboard for(int n = 0; ; n++) { } } 我很好奇handler函数中的n参数是什么。按^Z时,它通常会打印:8320、-1877932264或-1073743664。这些数字是多少 编辑:操作我的print

我有以下c代码:

void handler(int n) {
    printf("n value: %i\n");
}

int main() {
    signal(SIGTSTP, handler);   // ^Z at keyboard
    for(int n = 0; ; n++) {
    }   
}
我很好奇handler函数中的n参数是什么。按
^Z
时,它通常会打印:
8320
-1877932264
-1073743664
。这些数字是多少


编辑:操作我的printf写错了。我更正为:

void handler(int n) {
    printf("n value: %i\n",n);
}

现在n的值总是:18。这是什么

您尚未将任何数字传递给printf()。应该是:

void handler(int n) {
    printf("n value: %i \n", n);
}

例20中,
n
将是您正在捕捉的信号。有关说明,请参阅。另外请注意,手册页建议使用而不是
信号

它们是鼻魔的替身。

按照您编写的方式,它会打印出随机垃圾。原因是,您没有将
n
传递到
printf
。应该是

void handler(int n) {
    printf("n value: %i \n", n);
}

这样,它将打印信号编号。

信号处理程序参数是信号编号,因此您可以对多个信号使用一个函数。请参阅。

信号处理函数的单个参数是信号编号(毫不奇怪)。从
人工信号

 No    Name         Default Action       Description
 18    SIGTSTP      stop process         stop signal generated from keyboard (CTRL + Z usually)

它返回信号号。有关作业控制信号的更多信息,请查看此项,如您使用的信号

The SIGTSTP signal is an interactive stop signal. Unlike SIGSTOP, this signal 
can be handled and ignored.
Your program should handle this signal if you have a special need 
to leave files or system tables in a secure state when a process is 
stopped. For example, programs that turn off echoing should handle 
SIGTSTP so they can turn echoing back on before stopping.