Newsgroup: it.istruzione.universita.ingegneria
Titolo: [Sist. Op.] Mal di primitive

Ho scritto questo semplice programmino per provare la system call
"fork" di UNIX oltre che per spolverare il mio arrugginitissimo C
(che tra l'altro se e' arrugginito, cacchio lo spolvero a fare?):
| #include <sys/types.h>
| 
| //Functions
| void stampapid (pid_t p1, pid_t p2);
| 
| //Main program
| main () {
| 
|  pid_t procid, nisid, sonid, parid;
|  int a;
| 
| // Ricerca e stampa informazioni sul processo in corso
| 
| 	printf ("Processo padre");
| 	procid = getpid();
| 	parid = getppid();
| 	stampapid (procid, parid);
| 
| // Genera il primo figlio
| 
| 	sonid = fork ();
| 	if (sonid == -1) { // Errore
| 	   printf ("Processo padre - Impossibile generare primo figlio\n");
| 	   exit (-1);}
| 	if (sonid) // Processo padre
| 	   printf ("Processo padre - Generato figlio di PID: %d\n", sonid);
| 	if (!sonid) { // Processo figlio
| 		printf ("Processo figlio 1");
| 		procid = getpid();
| 		parid = getppid();
| 		stampapid (procid, parid);
| 		exit (0);}
| 
| // Genera il secondo figlio
| 
| 	nisid = fork ();
|         if (nisid == -1) { // Errore
|             printf ("Processo padre - Impossibile generare II figlio\n");                
|             exit (-2);}
|         if (nisid) // Processo padre
|           printf ("Processo padre - Generato figlio di PID: %d\n", nisid);
| 	if (!nisid) { // Processo figlio
|                 printf ("Processo figlio 2");
|                 procid = getpid();
|                 parid = getppid();
|                 stampapid (procid, parid);
| 		exit (0);}
| }
| 
| void stampapid (pid_t p1, pid_t p2) {
|         printf (" - PID: %d - Parent PID: %d\n", p1, p2);
| }
In linea di principio, il programma gira.
Pero' l'output del padre viene ripetuto ogni volta che c'e' una fork,
prima di dare l'output del figlio.
| Processo padre - PID: 1602 - Parent PID: 1440
| Processo padre - Generato figlio di PID: 1603
| Processo padre - Generato figlio di PID: 1604
| Processo padre - PID: 1602 - Parent PID: 1440
| Processo figlio 1 - PID: 1603 - Parent PID: 1
| Processo padre - PID: 1602 - Parent PID: 1440
| Processo padre - Generato figlio di PID: 1603
| Processo figlio 2 - PID: 1604 - Parent PID: 1
E normale? E se no: da che cosa dipende?
Potrebbe essere un problema esterno al programma, per esempio dei
buffer usati per l'output?
Byez
una standard DeK library
-- 
DeK - Delirio & Kaos
FAN n.1 del CrossPost e dell' OT :)
Visita One Big Mob - 
http://dek.hey.to
 [
http://dek.interfree.it
]

buffer usati per l'output?
Non ho capito cosa il tuo programma dovrebbe fare e invece fa (o il
contrario), ma ti conviene (per chiarirti le idee) cominciare ad usare
fflush(stdout) dopo ogni printf(), in modo da non avere
bufferizzazioni. Dopo questo, ci dici quale è l'errore che riscontri :)
-- 
ATTENZIONE: il vecchio indirizzo di posta 
paol...@yahoo.com
 è
in corso di dismissione. Il nuovo indirizzo di posta è 
ze...@libero-dante.it
, ma ricordati di togliere il nome del poeta
e il trattino.

bufferizzazioni. Dopo questo, ci dici quale è l'errore che riscontri :)
Grazie.
Infatti era proprio questo il problema, il post non sarebbe dovuto
partire, ma avevo dimenticato di averlo gia' segnato come "Send later"
Il problema era proprio che mi veniva stampato (solo richiedendo
l'output su file) l'output del programma padre 3 volte (presumo vegna
ristampato ogni volta che uno dei figli finisce) e non sapevo come
e se fosse possibile effettuare il flush.
Byez
un DeK()
