fork()的一道面试题

前言:题源

cpp 复制代码
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>
int main(void)
{
   int i;
   for(i=0; i<2; i++){
      fork();
      printf("-");
   }

   wait(NULL);
   wait(NULL);

   return 0;
}

知道一点fork()这个系统调用的人都知道,这个题是6个"-"被打印,但是答案是8个"-";

提醒:fork()时,子进程会拷贝父进程的缓冲区........(即刚开始父进程fork()后形成的一个子进程和自己在执行了printf("-");之后缓冲区会有一个"-"没有打印出来,第二次循环时,遇到fork();连同缓冲区里的"-"也拷贝走了;

也就是说:如果printf();后面有个'\n'的话(会刷新缓冲区),答案就是六个"-";

评论区有人留言:

printf("_") 不加\n,属于挖坑

确实如此,之前C语言就出过这种事儿....

相关推荐
老黄编程4 分钟前
--gpu-architecture <arch> (-arch)
linux·人工智能·机器学习
肖爱Kun6 分钟前
LINUX中USB驱动架构—URB请求块
linux·驱动
知星小度S3 小时前
系统核心解析:深入操作系统内部机制——进程管理与控制指南(一)【进程/PCB】
linux·运维·服务器·进程
Empty_7777 小时前
SELinux安全上下文
linux·服务器·安全
bug攻城狮8 小时前
解决Ubuntu中apt-get -y安装时弹出交互提示的问题
linux·运维·ubuntu
xiachong278 小时前
ubuntu18.04安装PCL1.14
linux·ubuntu
夜阑珊夭夭8 小时前
linux自定义网卡名字
linux·运维
czhc11400756639 小时前
Linux912 shell:$# $1 $?;RHEL 8 AppStream BaseOS
linux
佛天华9 小时前
centos 时间校准
linux·运维·centos
小柯J桑_10 小时前
Linux:线程封装
linux·运维·c++