C:信号功能(参数?)

six*_*ude 5 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++) {
    }   
}
Run Code Online (Sandbox Code Playgroud)

我很好奇处理函数中的n参数是什么.当你按^Z它时,通常打印:8320,-1877932264-1073743664.这些数字是多少?


编辑: Ops我写错了printf.我纠正它是:

void handler(int n) {
    printf("n value: %i\n",n);
}
Run Code Online (Sandbox Code Playgroud)

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

bst*_*rre 8

您还没有将任何数字传递给printf().应该:

void handler(int n) {
    printf("n value: %i \n", n);
}
Run Code Online (Sandbox Code Playgroud)

n在您的情况下,这将是您正在捕获的信号man 2 signal.请参阅说明.另请注意,联机帮助页建议使用sigaction()而不是signal.


jpa*_*cek 6

你写它的方式,打印出随机的垃圾.原因是,你没有传递nprintf.它应该是

void handler(int n) {
    printf("n value: %i \n", n);
}
Run Code Online (Sandbox Code Playgroud)

这样,它打印信号编号.


Nik*_*sov 6

信号处理程序参数是信号编号,因此您可以对许多信号使用一个函数.见signal(3).