前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >fork与缓冲区的问题

fork与缓冲区的问题

作者头像
lexingsen
发布2022-02-25 08:31:37
3180
发布2022-02-25 08:31:37
举报
文章被收录于专栏:乐行僧的博客

(1)在分析这个问题之前,先得熟悉一下缓冲区以及标准I/O中printf相关的问题。 printf行缓冲的概念以及刷新缓冲区的条件

(2)关于fork,在本例分析中只需要记住一点,fork之后子进程的地址空间中是拷贝了父进程的缓冲区的。

例1:

代码语言:javascript
复制
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <assert.h>

int main() {
	for (int i=0; i<2; ++i) {
		fork();
		printf("A\n"); //注意此处有\n, 直接刷新到标准输出中
	}
	return 0;
}

执行结果:

由执行结果,上述例1共输出六个A。下面我们来分析一下:

由上图能够很直观看到为什么会输出六个A。

例2:

代码语言:javascript
复制
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <assert.h>

int main() {
	for (int i=0; i<2; ++i) {
		fork();
		printf("A"); \\注意此处未加换行符
	}
	return 0;
}

执行结果:

看执行结果,相对于增加换行符的printf多输出了两个A,这是为什么?

文章的开头已经提及,fork出来的子进程会拷贝父进程的缓冲区。只要能把握住这一点,就能分析出原因来。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档