[c]做题学习记录:fork()函数与printf输出缓存的问题

目录

文章目录

前言

一、题目描述

二、题目简解



前言

我在牛客网刷题过程中遇到的一个题目,搞清楚后学习到了一些知识,本文用于记录

一、题目描述

在上下文及头文件均正常的情况下,字符串"Hello"会被输出几次?

int main() {
 printf("Hello");
 fork();
 printf("Hello");
}

二、题目简解

1.fork()的调用会把它所在语句以后的语句复制到一个子进程里,单独执行深入理解可参考 http://coolshell.cn/articles/7965.html

2.printf在打印到标准输出时,先写到缓冲区,直到遇到\n或者\r才会刷新缓存区,打印到屏幕上。

可参考C语言printf()打印时,缓存区的问题 - 简书

3.执行到代码第二行时,父进程缓冲区有一个Hello,调用fork函数,执行到代码第四行时,父进程缓冲区新增一个Hello,与原来的Hello一起共两个被复制到子进程缓冲区中,所以最后输出4次Hello。

拓展:如果第一个printf("Hello")改为printf("Hello\n"),那么最后将输出3次Hello。因为执行到代码第二行输出Hello后,父进程缓冲区被立即清空,执行到代码第四行时,父进程缓冲区新增一个Hello,父进程缓冲区的一个Hello被复制到子进程缓冲区中,所以最后输出3次Hello。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值