南风轩

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
#include <iostream>
#include <sys/types.h>
#include <unistd.h>

using namespace std;

int main (int argc, char *argv[])
{
	printf("%d           %d\n", getpid(), getppid());
	if(fork() == 0) {
		printf("%d           %d\n", getpid(), getppid());
	}
	return(0);
}

 

代码如上,如果直接在终端执行,结果如下:

image

如果重定向到文件,则结果为:

image

原因是linux下默认的缓存方式引起的。linux默认的缓存方式如下:

  屏幕、键盘和终端等交互作用设备 磁盘文件、管道等非交互作用设备
标准输出 行缓存 块缓存
标准出错 无缓存 无缓存

 

因为在屏幕输出是行缓存模式,所以直接就把两句话print了。

输出到文件时,首先是子进程结束,它结束的时候,才会写文件。这时候缓存里有主进程和子进程的两句话(子进程会从父进程那里拷贝内存的),所以就写到文件里了。然后父进程退出,父近程还是有一句话缓存的。所以有输出了一句话到文件里。这样就成了三句。

posted on 2010-01-19 23:04  南风轩  阅读(2173)  评论(0编辑  收藏  举报