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);
}
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);
}