Discussione: Problemino in C
View Single Post
Old 24-05-2005, 18:06   #7
mjordan
Bannato
 
L'Avatar di mjordan
 
Iscritto dal: Mar 2002
Cittā: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR ‫Casco: XR1000 Diabolic 3
Messaggi: 27578
Quello sarebbe C?
Il motivo e' che durante la fork() vengono copiati anche i buffer destinati all'uso di stdout, e quindi quando il processo termina, viene effettuato un flush di tali buffer, facendo scrivere cose inaspettate (probabilmente perche' va a scrivere di nuovo un buffer per cui non si e' avuto ancora il tempo di svuotarlo). Pertanto e' opportuno svuotarlo da subito con fflush(), prima di forkare un processo. Inoltre sleep() non e' un metodo efficace di attendere un processo, devi usare la funzione wait().

Metticeli gli header nei programmi e soprattutto usa il tag code quando posti

Codice:
/* -*-linux-c-*- */
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

int glob = 10;
char buf[] = "Scritta da stdout\n";

int main(void) 
{
         int var = 100;
         pid_t pid;
         int status;

         write(STDOUT_FILENO, buf, sizeof(buf)-1);
         printf("Prima della fork\n");
         fflush(stdout);

         if (!(pid = fork())) {
                  status = 0; 
                  glob ++; var ++;
         }
         else 
                  wait(&status);
                
        printf("pid = %d, glob = %d, var = %d\n", getpid(), glob, var);

        return status; 
}
mjordan č offline   Rispondi citando il messaggio o parte di esso