SO: Linux, Lingua: puro Cprintf anomalia dopo "fork()"
Mi sto muovendo in avanti ad imparare la programmazione C in generale, e di programmazione C sotto UNIX in un caso speciale.
Ho rilevato uno strano (per me) comportamento della funzione printf()
dopo l'utilizzo di una chiamata fork()
.
Codice
#include <stdio.h>
#include <system.h>
int main()
{
int pid;
printf("Hello, my pid is %d", getpid());
pid = fork();
if(pid == 0)
{
printf("\nI was forked! :D");
sleep(3);
}
else
{
waitpid(pid, NULL, 0);
printf("\n%d was forked!", pid);
}
return 0;
}
uscita
Hello, my pid is 1111
I was forked! :DHello, my pid is 1111
2222 was forked!
Perché il secondo "Ciao" stringa si verificano in uscita del bambino?
Sì, è esattamente ciò che il genitore ha stampato quando è stato avviato, con il genitore pid
.
Ma! Se mettiamo un personaggio \n
alla fine di ogni stringa otteniamo i risultati attesi:
#include <stdio.h>
#include <system.h>
int main()
{
int pid;
printf("Hello, my pid is %d\n", getpid()); // SIC!!
pid = fork();
if(pid == 0)
{
printf("I was forked! :D"); // removed the '\n', no matter
sleep(3);
}
else
{
waitpid(pid, NULL, 0);
printf("\n%d was forked!", pid);
}
return 0;
}
uscita:
Hello, my pid is 1111
I was forked! :D
2222 was forked!
Perché succede? È un comportamento corretto, o è un bug?
Ok, ho capito. Ma non riesco ancora a spiegarmi perché il "buffer garbage" appare alla fine della riga appena stampata nell'output del bambino? Ma aspetta, ora dubito che sia davvero l'uscita di CHILD .. oh, potresti spiegare perché l'output ha un aspetto ESATTAMENTE (nuova stringa PRIMA del vecchio) così, passo dopo passo, quindi sarei molto grato. Grazie comunque! – pechenie
spiegazione MOLTO impressionante! Grazie mille, finalmente l'ho capito chiaramente! P.S .: Ho dato un voto per te in precedenza, e ora ho stupidamente cliccato sulla "freccia su" ancora una volta, quindi voto scomparso. Ma non posso dartelo ancora una volta a causa di "la risposta è troppo vecchia" :( P.P.S .: ti ho dato un voto in un'altra domanda e grazie ancora! – pechenie