相关疑难解决方法(0)

"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;
}
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 …

c unix linux printf fork

66
推荐指数
3
解决办法
3万
查看次数

fork()打印前的语句两次

我正在试验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)

c fork stdout buffering io-redirection

6
推荐指数
1
解决办法
2749
查看次数

使用printf在c中fork()

有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只打印一次,第一次打印两次?

c printf fork

5
推荐指数
1
解决办法
2005
查看次数

标签 统计

c ×3

fork ×3

printf ×2

buffering ×1

io-redirection ×1

linux ×1

stdout ×1

unix ×1