SO: Linux, Idioma: C puroprintf anomalía después de "tenedor()"
estoy avanzando en el aprendizaje de programación C en general, y de programación C bajo UNIX en un caso especial.
Detecté un comportamiento extraño (para mí) de la función printf()
después de usar una llamada fork()
.
Código
#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;
}
salida
Hello, my pid is 1111
I was forked! :DHello, my pid is 1111
2222 was forked!
¿Por qué ocurrió la segunda cadena "Hola" en la salida del niño?
Sí, es exactamente lo que el padre imprimió cuando comenzó, con el padre pid
.
¡Pero! Si colocamos un carácter \n
al final de cada cadena se obtiene el resultado esperado:
#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;
}
salida:
Hello, my pid is 1111
I was forked! :D
2222 was forked!
¿Por qué se produce? ¿Es correcto el comportamiento o es un error?
Ok, lo tengo. Pero todavía no puedo explicarme por qué aparece la "basura del tampón" al final de la línea recién impresa en la salida del niño. Pero espere, ahora dudo que sea realmente la producción de CHILD ... oh, podría explicar por qué la salida se ve EXACTAMENTE (cadena nueva ANTES de la anterior) así, paso a paso, así que estaría muy agradecido. ¡Gracias de todos modos! – pechenie
¡Explicación MUY impresionante! Muchas gracias, ¡finalmente lo entendí claramente! P.S .: He dado un voto por usted anteriormente, y ahora hice clic estúpidamente en la "flecha hacia arriba" una vez más, por lo que el voto desapareció. Pero no puedo devolvérselo una vez más porque "la respuesta es demasiado antigua" :( P.P.S .: Le di un voto en otra pregunta. ¡Y gracias una vez más! – pechenie