免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2177 | 回复: 8
打印 上一主题 下一主题

[C] fork() fork()输出问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-04-17 15:51 |只看该作者 |倒序浏览

下面网址http://coolshell.cn/articles/7965.html例子是 fork();printf("-");我看懂了。

但是我想出了另一个类似问题,就计算不出结果了,请大侠们拍砖:

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

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

   }

   return 0;
}





参考:http://coolshell.cn/articles/7965.html

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11
2 [报告]
发表于 2014-04-17 16:17 |只看该作者
这不就是兔子生小兔子的故事吗?
兔子1生了兔子2、3、4。兔子1拉了3陀屎“---”
兔子2生了兔子5、6。兔子2拉了2陀屎“--”
兔子3生了兔子7、8。兔子3拉了2陀屎“--”
兔子4生了兔子9、10。兔子4拉了2陀屎“--”
兔子5生了兔子11。兔子5拉了1陀屎“-”
兔子6生了兔子12。兔子6拉了1陀屎“-”
兔子7生了兔子13。兔子7拉了1陀屎“-”
兔子8生了兔子14。兔子8拉了1陀屎“-”
兔子9生了兔子15。兔子9拉了1陀屎“-”
兔子10生了兔子16。兔子10拉了1陀屎“-”
兔子11-16还没有长大就夭折了。
最后这些个屎全都不见了。因为掉进茅坑里了。

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11
3 [报告]
发表于 2014-04-17 16:18 |只看该作者
好象兔子超生了。不过过程就是这样。

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11
4 [报告]
发表于 2014-04-17 16:54 |只看该作者
还有几种可能,就是新出生的小兔子可能因为难产而没出生就死掉了,当然就没有然后了……

论坛徽章:
0
5 [报告]
发表于 2014-04-17 17:23 |只看该作者
本帖最后由 ertou 于 2014-04-17 17:25 编辑

回复 2# cobras


源程序:
#include<stdio.h>
#include<string.h>
#include<sys/types.h>
#include<unistd.h>
void main()
{
        int i;
       
        for(i=0;i<2;i++)
        {
                printf("ppid=%d,pid=%d,i=%d  《空格》 ",getppid(),getpid(),i);
                fork();
        }
}
输出结果:
    [root@P710-SYSM ~]# ./a.out
ppid=13497,pid=646,i=0   ppid=13497,pid=646,i=1   ppid=13497,pid=646,i=0   ppid=13497,pid=646,i=1   ppid=13497,pid=646,i=0   ppid=646,pid=647,i=1   ppid=13497,pid=646,i=0   ppid=646,pid=647,i=1  


能不能用附件形式我解释一下,我弄了半天没搞明白,你写的我也没看明白,先谢啦

fork01jpg.jpg (32.55 KB, 下载次数: 37)

fork01jpg.jpg

论坛徽章:
0
6 [报告]
发表于 2014-04-17 17:27 |只看该作者
源码测试:
void main()
{
        int i;
        
        for(i=0;i<2;i++)
        {
                printf("ppid=%d,pid=%d,i=%d  \n ",getppid(),getpid(),i);
                fork();
        }
}

结果如下:
[root@P710-SYSM ~]# ./a.out
ppid=13497,pid=32644,i=0
   ppid=13497,pid=32644,i=1
      ppid=32644,pid=32645,i=1

论坛徽章:
0
7 [报告]
发表于 2014-04-17 17:35 |只看该作者
cobras 发表于 2014-04-17 16:54
还有几种可能,就是新出生的小兔子可能因为难产而没出生就死掉了,当然就没有然后了……


我这例子是兔子先大便,但注意printf后面是空格,我无法理解打印8次的结果;如果printf后面是换行,我能理解打印3次的结果;

论坛徽章:
44
15-16赛季CBA联赛之浙江
日期:2021-10-11 02:03:59程序设计版块每日发帖之星
日期:2016-07-02 06:20:0015-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:452016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之山东
日期:2016-04-17 12:00:2815-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:3615-16赛季CBA联赛之天津
日期:2016-11-02 00:33:1215-16赛季CBA联赛之浙江
日期:2017-01-13 01:31:49
8 [报告]
发表于 2014-04-17 17:52 |只看该作者
回复 7# ertou

要记得肚子里有大便的兔子生下的小兔子会把大便一起继承下来的。

好恶心,谁举的例子…………

论坛徽章:
4
白羊座
日期:2013-09-17 21:59:30技术图书徽章
日期:2013-10-12 22:16:03白羊座
日期:2013-10-14 11:01:40双子座
日期:2013-12-17 18:26:39
9 [报告]
发表于 2014-04-17 18:08 |只看该作者
去看看标准I/O流的缓冲概念,apue中就有
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP