C 信号错误:";“无效表达式”的无效使用;
我在使用“信号”功能时遇到了一些其他问题。我有5个孩子和它的父亲 一次只能运行一个进程,并且该进程应该以一定的延迟(从1秒到10秒)更改为另一个进程。对于这些更改,必须使用SIGUSER1信号。这是我的代码和错误:C 信号错误:";“无效表达式”的无效使用;,c,signals,multiprocess,C,Signals,Multiprocess,我在使用“信号”功能时遇到了一些其他问题。我有5个孩子和它的父亲 一次只能运行一个进程,并且该进程应该以一定的延迟(从1秒到10秒)更改为另一个进程。对于这些更改,必须使用SIGUSER1信号。这是我的代码和错误: struct compartido{ int pid1, pid2, pid3, pid4, pid5; int propietario; int contador; int pidpadre; };
struct compartido{
int pid1, pid2, pid3, pid4, pid5;
int propietario;
int contador;
int pidpadre;
};
struct compartido* var;
void manejador(int prop, int actual){
if(signal(SIGUSR1,SIG_IGN)==SIG_ERR){
perror("Error en el Signal.\n");
exit(2);
}
printf("Proceso %d al mando en el manejador.\n",prop);
kill(prop,SIGCONT);
if(actual==getpid()) kill(actual,SIGSTOP);
sleep(rand() % 11 + 1);
}
int main(int argc, char *argv[]) {
key_t llave1,llavesem;
int idmem,idsem;
idmem=shmget(llave1,sizeof(struct compartido),IPC_CREAT|0600);
if (idmem==-1) {
perror ("shmget");
return 1;
}
var=(struct compartido*) shmat(idmem,0,0);
var->pidpadre=getpid();
var->propietario=var->pid1;
/*Next line gives the error*/
if(var->pid1==getpid()) signal(SIGUSR1,manejador(var->propietario, getpid()));
/*Doing more things inside...*/
/*Next line gives the error*/
signal(SIGUSR1,manejador(var->propietario, getpid()));
}
据我所知,名为“manejador”的函数可以与一个int值一起使用
void manejador(int s){
printf(“接收到的信号%d\n”,s);
}
但我需要2个变量,因为我应该停止当前进程并重新启动新进程
我所犯的确切错误是:
错误:无效使用void表达式
你能帮帮我吗
- 您需要传递函数标识符,而不是调用函数,即只需留在
manejdor
- 信号处理程序有非常具体的布局,您必须遵守:信号处理程序必须接受一个
参数并返回int
void
signal(SIGUSR1,manejador(var->propietario, getpid()));