zoukankan      html  css  js  c++  java
  • 一道常考fork题挖掘

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

    输出结果不是6个减号,而是8个,如果你见过此题,当不足为奇。因为,子进程复制了父进程缓冲区——而由于printf没带 ,导致把一个咱的缓冲器给了后代,直到(子)进程结束时才把缓冲区所有内容一起打出来。

    为了简化问题,先修改printf语句为: 

    printf("ppid=%d, pid=%d, i=%d ", getppid(), getpid(), i);

    我本机得结果如下,

    ppid=13678, pid=4116, i=0
    ppid=4116, pid=4117, i=0
    ppid=13678, pid=4116, i=1
    ppid=4116, pid=4118, i=1 
    ppid=4116, pid=4117, i=1 
    ppid=4117, pid=4119, i=1

    可理解为按如下流程执行的(下图中注释格式为“进程号/执行顺序/缓冲区中i的值”)

    作为验证,把printf语句改为printf("ppid=%d, pid=%d, i=%d split ", getppid(), getpid(), i);这里的split作为自定义的分隔符。

    程序执行输出是

    ppid=1406, pid=1407, i=0 split ppid=1407, pid=1408, i=1 split ppid=1406, pid=1407, i=0 split ppid=1406, pid=1407, i=1 split ppid=13678, pid=1406, i=0 split ppid=1406, pid=1409, i=1 split ppid=13678, pid=1406, i=0 split ppid=13678, pid=1406, i=1 split

    提示执行图示如下,

    此题得解。

    扩展:假如for结束条件为i<3呢?数出多少个减号?答案是24个!

  • 相关阅读:
    判断以下字符串中出现次数最多的字符,并且算出该字符出现的次数
    status的状态码
    call和apply的区别?
    闭包
    $(document).ready和window. onload的区别
    python_pandas常用操作
    python经典例题
    爬B站并保存成csv文件。提供数据
    data_analysis:初识numpy
    01爬取豆瓣网电影数据进行numpy的练习
  • 原文地址:https://www.cnblogs.com/zhaoyl/p/3529117.html
Copyright © 2011-2022 走看看