操作系统: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;
}
Run Code Online (Sandbox Code Playgroud)
产量
Hello, my pid is 1111
I was forked! :DHello, my pid is 1111
2222 was forked!
Run Code Online (Sandbox Code Playgroud)
为什么第二个"Hello"字符串出现在子输出中?
是的,这正是父母在开始时与父母一起打印的内容pid …
我正在试验fork()并重新指导检查父母的重新指示是否也适用于孩子.我写了以下简单的程序
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main ()
{
freopen( "error.txt", "w+t", stdout ); // From now on, stdout = error.txt
printf (" ERROR! WHY DONT U UNDERSTAND?\n");
if ( fork() == 0 )
{
printf(" I AM CHILD\n");
exit(0);
}
else-
{
printf (" EITHER I AM A PARENT OR SOMETHING GOT SCREWED\n");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
error.txt我得到的输出()是
ERROR! WHY DONT U UNDERSTAND?
EITHER I AM A PARENT OR SOMETHING GOT SCREWED
ERROR! WHY DONT U UNDERSTAND? …Run Code Online (Sandbox Code Playgroud) 有2个不同的程序,它们很小,例如:
int main()
{
printf ("print hello");
fork();
}
Run Code Online (Sandbox Code Playgroud)
int main()
{
printf ("print hello\n");
fork();
}
Run Code Online (Sandbox Code Playgroud)
输出1是:`print helloprint hello
输出2是:print hello
问题是,为什么\n只打印一次,第一次打印两次?