printf的缓冲机制

发布时间 2023-03-27 20:12:22作者: 眉间

 

printf的缓冲机制,printf某些内容时,操作系统仅仅是把该内容放到了stdout的缓冲队列里了,并没有实际的写到屏幕上。但是,只要看到有\n, 则会立即刷新stdout,因此就马上能够打印。在这个例子中:

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

int main(void)

{

    printf("hello");

    if(0==fork())

    {

        printf(" child\n");

        return 0;

    }

    printf(" parent\n");

}

 

运行结果:

hello parent

hello child

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

int main(void)

{

    printf("hello\n");

    if(0==fork())

    {

        printf(" child\n");

        return 0;

    }

    printf(" parent\n");

}

 

运行结果:

hello

 parent

 child

 

1、mian函数执行printf(“hello”)后, "hello"仅仅被放到了缓冲里,再运行到fork时,缓冲里面的 hello被子进程继承了,因此在子进程度stdout缓冲里面就也有了"hello"。所以,hello会分别会被父子进程各打印一次。

2、mian函数执行printf("hello\n")后,"hello" 被立即打印到了屏幕上(因为有\n),之后fork到的子进程里的stdout缓冲里不会有"hello"内容,因此hello只会被父进程打印一次。