gpt4 book ai didi

c - 收到未声明的 SIGALRM SIGSTP 错误消息,尽管我已经包含了

转载 作者:太空宇宙 更新时间:2023-11-04 01:22:05 27 4
gpt4 key购买 nike

我正在练习信号。当我编译代码时,我收到了未声明的 SIGALRM 和未声明的 SIGSTP 错误消息。

main.c:46:16: error: ‘SIGALARM’ undeclared(首次在此函数中使用) 信号(SIGALARM, (void (*)(int))sig_alarm);

main.c:68:16: 错误:‘SIGSTP’未声明(首次在此函数中使用) 信号(SIGSTP, (void (*)(int))int_handler);

#include <sys/types.h>
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>



void sig_alarm(int sig){
kill(sig,SIGKILL);
}

void parent1(int sig){
kill(sig, SIGUSR1);
}

void parent2(int sig){
if(sig == 0){/*child is running*/
kill(sig, SIGUSR2);
}else if(sig > 0){/*parent is running*/
printf("Goodbye!");
exit(0);
}
}

void int_handler(int sig){}

void child1(int sig){
printf("Signal received!");
}

void child2(int sig){
printf("Child exiting...");
exit(0);
}

int main(){
pid_t pid;
if((pid = fork()) < 0){
perror("fork error");
}else if(pid > 0){/*parent*/


signal(SIGALARM, (void (*)(int))sig_alarm);
alarm(10);
signal(SIGTSTP, (void (*)(int))parent1);
while(1){
pause();
}
alarm(0);


signal(SIGALARM, (void (*)(int))sig_alarm);

alarm(10);
signal(SIGINT, (void (*)(int))parent2);
while(1){
pause();
}
alarm(0);

}else{/*child*/


signal(SIGINT, (void (*)(int))int_handler);
signal(SIGSTP, (void (*)(int))int_handler);


signal(SIGUSR1, (void (*)(int))child1);
while(1){
pause();
}



signal(SIGUSR2, (void (*)(int))child2);
while(1){
pause();
}
}
return 0;
}

最佳答案

阅读signal(7) man page获取有效的信号名称。

正确的名称是 SIGTSTP(或 SIGSTOP - 不清楚您的确切意图是什么)和 SIGALRM

请注意,SIGSTOP 无法被捕获。

关于c - 收到未声明的 SIGALRM SIGSTP 错误消息,尽管我已经包含了 <signal.h>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39906594/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com