请教一个关于flush的问题

1 view
Skip to first unread message

wu9961

unread,
Dec 29, 2009, 12:54:00 AM12/29/09
to pon...@googlegroups.com
#include<stdio.h>
#include<unistd.h>
int main()
{
        printf("hello");
 //       fflush(stdout);
        fork();
        return 0;
}
注释fflush那句,程序会打印两个hello,如果不注释那么只会打印一个hello,请教一下各位这是为什么?

Shuo Chen

unread,
Dec 29, 2009, 1:07:49 AM12/29/09
to TopLanguage
APUE 上有解释,看书去吧。

Xiaojun Deng

unread,
Dec 29, 2009, 1:23:07 AM12/29/09
to pon...@googlegroups.com
2009/12/29 wu9961 <wu9...@gmail.com>:

行缓冲, 可以uncommnet fflush, 对printf加上\n, 效果和fflush一样

wu9961

unread,
Dec 29, 2009, 1:31:50 AM12/29/09
to pon...@googlegroups.com
APUE上有我也知道,我没问fflush怎么用,我问的是这个问题的内部是怎么回事,我想知道一些导致这种情况的细节?

2009/12/29 Shuo Chen <gian...@gmail.com>

Xiaojun Deng

unread,
Dec 29, 2009, 1:36:07 AM12/29/09
to pon...@googlegroups.com
2009/12/29 wu9961 <wu9...@gmail.com>:
> APUE上有我也知道,我没问fflush怎么用,我问的是这个问题的内部是怎么回事,我想知道一些导致这种情况的细节?
>

APUE解释的很清楚
行缓冲嘛,hello在父进程的buffer中,child进程继承了父进程的buffer,所以就打印了2次;
用了fflush之后,buffer被清空了,child进程继承的buffer中就没有了hello,只打印父进程的hello

wu9961

unread,
Dec 29, 2009, 1:37:55 AM12/29/09
to pon...@googlegroups.com
谢谢你了。

2009/12/29 Xiaojun Deng <xjd...@gmail.com>

Shuo Chen

unread,
Dec 29, 2009, 1:40:24 AM12/29/09
to TopLanguage
第 8.3 节,fork
第一版第 189 页至 190 页就举的这个例子,细节解释得也很详尽。

On Dec 29, 2:31 pm, wu9961 <wu9...@gmail.com> wrote:
> APUE上有我也知道,我没问fflush怎么用,我问的是这个问题的内部是怎么回事,我想知道一些导致这种情况的细节?
>

> 2009/12/29 Shuo Chen <giantc...@gmail.com>

Reply all
Reply to author
Forward
0 new messages