Linux——fork面试题讨论

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Forever_ZhangKe/article/details/79818473
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

int main(void)
{
   int i;
   for(i=0; i<2; i++){
      fork();
      printf("-");
   }

   wait(NULL);
   wait(NULL);

   return 0;
}

1、问题:请问打印结果为多少“ - ”?
答:8个,父进程第一次调用fork一个子进程,父子分别打印一个“ - ”到缓冲区(2个),第二次fork父子进程分别创建一个子进程,同时也继承父进程的进程空间,其中包括指令,变量值,程序调用栈,环境变量,缓冲区等。所以第二次fork的两个子进程本身输出缓冲区就有一个“ - ”,所以最终输出的时候,两个父进程打印(4个),两个子进程(4个)。

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

int main(void)
{
   int i;
   for(i=0; i<2; i++){
      fork();
      printf("-\n");
   }

   wait(NULL);
   wait(NULL);

   return 0;
}

2)打印几个“ - ”?
 答:6个
程序遇到“\n”,或是EOF,或是缓中区满,或是文件描述符关闭,或是主动flush,或是程序退出,就会把数据刷出缓冲区。需要注意的是,标准输出是行缓冲,所以遇到“\n”的时候会刷出缓冲区,但对于磁盘这个块设备来说,“\n”并不会引起缓冲区刷出的动作,那是全缓冲,你可以使用setvbuf来设置缓冲区大小,或是用fflush刷缓存。


展开阅读全文

没有更多推荐了,返回首页