0
我使用「信號」功能有一些其他麻煩。我有5個子進程和它的父親。信號錯誤:「無效使用void表達式」
一次只能運行一個進程,並且該進程應該有一些延遲(從1到10秒)變爲另一個偶然進程。對於這些更改,它必須使用SIGUSER1信號。這是我的代碼,我有錯誤:
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值 無效manejador(int類型){printf的 (用來調用的函數」接收到的信號%d \ n「,s); }
但是我需要2個變量,因爲我應該停止當前進程並重新啓動新進程。
我有確切的錯誤說:
error: invalid use of void expression
能否請你幫我?
如果我只是把「manejador」我得到這樣的警告:警告:SI的傳遞參數2不兼容的指針類型[缺省情況下啓用]。 /usr/include/signal.h:101:23:note:expected'__sighandler_t'but argument is of type'void(*)(int,int)' – user1660559