ОС: Linux, язык: чистый C
Я продвигаюсь вперед в обучении программированию на языке C в целом и программировании на C под UNIX в специальном случае.
Я обнаружил странное (для меня) поведение функции printf()
после использования вызова fork()
.
код
#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;
}
Выход
Hello, my pid is 1111
I was forked! :DHello, my pid is 1111
2222 was forked!
Почему вторая строка "Hello" появилась в дочернем выходе?
Да, это именно то, что родительский текст напечатал при запуске, с родительским pid
.
Но! Если мы поместим символ \n
в конце каждой строки, получим ожидаемый результат:
#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;
}
Выход
Hello, my pid is 1111
I was forked! :D
2222 was forked!
Почему это происходит? Это правильное поведение, или это ошибка?