stella_650
12-07-2008, 08:32
Buongiorno raga,
:confused: vorrei capire perchè non mi funziona bene la scrittura e la lettura di un valore intero su file gestita tramite un processo padre ed un processo figlio nel seguente programma:
void handler(int);
int main(int argc, char *argv[])
{
int fd,pid,pidl,pidc;
FILE *fp,*fs;
if(argc!=2)
{
printf("Errore! <eseguibile> <nomefile test>\n");
exit(-1);
}
printf("PADRE: %d\n",getpid());
fp=fopen(argv[1],"w");
fs=fopen(argv[1],"r");
if((pid=fork())<0)
perror("Fork");
if(pid==0)
{
signal(SIGUSR1,handler);
pidc=getpid();
printf("FIGLIO: %d\n",pidc);
//Scrivo il pid del figlio nel file
fprintf(fp,"%d",pidc);
while(1)
pause();
}
else
{
while(1)
{
signal(SIGUSR2,handler);
sleep(5);
//legge il pid dal file
fscanf(fs,"%d",&pidc);
printf("Letto dal file pid %d\n",pidc);
kill(pid,SIGUSR1);
//pause();
}
}
//close(fd);
fclose(fp);
fclose(fs);
exit(0);
}
void handler(int signo)
{
if(signo==SIGUSR1)
{
printf("SEGNALE FIGLIO%d ricevuto\n",signo);
kill(getppid(),SIGUSR2);
}
if(signo==SIGUSR2)
{
printf("SEGNALE PADRE RICEVUTO!\n");
exit(0);
}
return;
}
Grazie in anticipo per l'aiuto...
:confused: vorrei capire perchè non mi funziona bene la scrittura e la lettura di un valore intero su file gestita tramite un processo padre ed un processo figlio nel seguente programma:
void handler(int);
int main(int argc, char *argv[])
{
int fd,pid,pidl,pidc;
FILE *fp,*fs;
if(argc!=2)
{
printf("Errore! <eseguibile> <nomefile test>\n");
exit(-1);
}
printf("PADRE: %d\n",getpid());
fp=fopen(argv[1],"w");
fs=fopen(argv[1],"r");
if((pid=fork())<0)
perror("Fork");
if(pid==0)
{
signal(SIGUSR1,handler);
pidc=getpid();
printf("FIGLIO: %d\n",pidc);
//Scrivo il pid del figlio nel file
fprintf(fp,"%d",pidc);
while(1)
pause();
}
else
{
while(1)
{
signal(SIGUSR2,handler);
sleep(5);
//legge il pid dal file
fscanf(fs,"%d",&pidc);
printf("Letto dal file pid %d\n",pidc);
kill(pid,SIGUSR1);
//pause();
}
}
//close(fd);
fclose(fp);
fclose(fs);
exit(0);
}
void handler(int signo)
{
if(signo==SIGUSR1)
{
printf("SEGNALE FIGLIO%d ricevuto\n",signo);
kill(getppid(),SIGUSR2);
}
if(signo==SIGUSR2)
{
printf("SEGNALE PADRE RICEVUTO!\n");
exit(0);
}
return;
}
Grazie in anticipo per l'aiuto...