目录
前言
我在牛客网刷题过程中遇到的一个题目,搞清楚后学习到了一些知识,本文用于记录
一、题目描述
在上下文及头文件均正常的情况下,字符串"Hello"会被输出几次?
int main() {
printf("Hello");
fork();
printf("Hello");
}
二、题目简解
1.fork()的调用会把它所在语句以后的语句复制到一个子进程里,单独执行深入理解可参考 http://coolshell.cn/articles/7965.html
2.printf在打印到标准输出时,先写到缓冲区,直到遇到\n或者\r才会刷新缓存区,打印到屏幕上。
3.执行到代码第二行时,父进程缓冲区有一个Hello,调用fork函数,执行到代码第四行时,父进程缓冲区新增一个Hello,与原来的Hello一起共两个被复制到子进程缓冲区中,所以最后输出4次Hello。
拓展:如果第一个printf("Hello")改为printf("Hello\n"),那么最后将输出3次Hello。因为执行到代码第二行输出Hello后,父进程缓冲区被立即清空,执行到代码第四行时,父进程缓冲区新增一个Hello,父进程缓冲区的一个Hello被复制到子进程缓冲区中,所以最后输出3次Hello。
860

被折叠的 条评论
为什么被折叠?



