PDA

View Full Version : [C] Problema con EXEC su algoritmo con gestione dei segnali


fabrymus
31-10-2015, 14:09
Salve a tutti posto di seguito un codice scritto in C in cui riscontro un problema sostanzialmente nel passaggio degli argomenti di argv[] che in pratica sono i comandi che il figlio deve eseguire al segnale del padre.
Nella funzione "figlio" ho provato a fare qualche debug con i printf e il contenuto di argv lo riceve ma dalla funzione "figlio" alla funzione "eseguibile" il contenuto si perde e quindi l'execlp in output non dà nulla. Qualcuno cortesemente può aiutarmi a capire dove ho sbagliato? Grazie in antipico.

//



#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <signal.h>

void eseguibile();
void figlio(char *com, int pidf);
char *com;
void main(int argc, char *argv[])
{
char *com;
int ris;
int i=1;
int pidfiglio;
int pidff;
ris=fork();
pidff=ris;


switch(ris)
{
case -1: printf("\n\nErrore nella fork riprovare in seguito\n\n");
break;

case 0:
pidfiglio=getpid();

figlio(argv[i], pidfiglio);

break;

default:
printf("\n\nSono nel padre pid:%d invio il segnale al figlio...\n\n", getpid());
sleep(5);
printf("\n\nVALORE PIDFIGLIO A CUI INVIARE IL PER SEGNALE: %d\n\n", pidff);

kill(pidff, SIGUSR1);

break;
}
}
void figlio(char *com, int pidf)

{
printf("\n\nSono il figlio PID:%d IMPOSTO IL SEGNALE \n\n", pidf);

signal(SIGUSR1, eseguibile);
while(1);
}
void eseguibile()
{

printf("\n\nSono il figlio pronto ad eseguire..\n\n");

execlp(com,com,0,0);

}

fabrymus
31-10-2015, 18:37
Potete chiudere la discussione perchè ho risolto, problema di variabili globali.