C:信号功能(参数?)
我有以下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
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.