12345678_0001
2019-06-01 16:23:58
“fork()”之后的printf異常操作系統:Linux,語言:純C我正在學習一般的C編程,以及UNIX下的特殊情況下的C編程。我發現了一種奇怪的行為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 1111I was forked! :DHello, my pid is 11112222 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 1111I was forked! :D2222 was forked!為什么會發生這種事?它是正確的行為,還是一個錯誤?
3 回答
繁星淼淼
TA貢獻1775條經驗 獲得超11個贊
\n
\n
fflush
printf( "Hello, my pid is %d", getpid() );fflush(stdout);
慕娘9325324
TA貢獻1783條經驗 獲得超5個贊
fork()fork()fflush
exec*fflushwrite_exit_Exitexit
- 3 回答
- 0 關注
- 845 瀏覽
添加回答
舉報
0/150
提交
取消
