【发布时间】:2011-02-01 14:33:09
【问题描述】:
操作系统:Linux,语言:纯 C
我正在学习一般的 C 编程,以及特殊情况下的 UNIX 下的 C 编程。
在使用fork() 调用后,我检测到printf() 函数的奇怪行为(对我而言)。
代码
#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!
为什么会这样?这是正确的行为,还是错误?
【问题讨论】: