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语言就出过这种事儿....

相关推荐
Eric.Lee20216 小时前
ubuntu 安装 Miniconda
linux·运维·python·ubuntu·miniconda
会飞的土拨鼠呀7 小时前
通过Linux进程id找到程序路径
linux·服务器·网络
8***84828 小时前
如何在Linux中找到MySQL的安装目录
linux·运维·mysql
9***J6288 小时前
Linux下PostgreSQL-12.0安装部署详细步骤
linux·运维·postgresql
W***83208 小时前
如何在 Ubuntu 22.04 上安装 MySQL
linux·mysql·ubuntu
凌寒119 小时前
Linux(Debain)安装Redis、数据迁移
linux·运维·服务器·redis
7***q6089 小时前
在linux(Centos)中Mysql的端口修改保姆级教程
linux·mysql·centos
用户4760220227810 小时前
机器配置免密切root
linux
zzzsde11 小时前
【Linux】基础开发工具(2):vim补充说明&&gcc/g++编译器
linux·运维·服务器
q***656911 小时前
使用Canal将MySQL数据同步到ES(Linux)
linux·mysql·elasticsearch