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