| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 680 人关注过本帖
标题:以下程序会输出几个“-”?请解释下原因
只看楼主 加入收藏
书生等待
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:8
帖 子:280
专家分:689
注 册:2013-2-22
结帖率:100%
收藏
已结贴  问题点数:100 回复次数:15 
以下程序会输出几个“-”?请解释下原因
#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
int main()
{
    int i;
    for(i=0;i<2;i++)
    {
        fork();
        printf("-\n");
    }

    return 0;
}
搜索更多相关主题的帖子: include 
2014-11-18 11:04
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:10 
fork 是干啥的啊

DO IT YOURSELF !
2014-11-18 11:05
pycansi
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:418
专家分:1060
注 册:2012-7-26
收藏
得分:10 
6个吧,如果 fork 不出错的话

画个图就知道了,树状图……


莫问前尘有愧,但求今生无悔
2014-11-18 13:07
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:10 
回复 2 楼 wp231957
linux平台下用过这个函数,不过忘记是干嘛的了

思考赐予新生,时间在于定义
2014-11-18 13:28
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:10 
正好又一个实例:
事实上用C编程根本就不是语法和语言的问题,而是对问题对象的熟悉程度,有些人根本就不懂硬件和系统基础,就硬去用C编程,解决不了,却以为是C没学好,殊不知其实是不懂硬件和系统操作。举个简单的、极常见的、坛上的确多次出现过的例子,很多人知道用system("pause")暂停等待,但知道这实际上是运行操作系统Command指令的就不多了,其实只要懂操作系统的基本操作和指令,这类用法是很容易想到的,但绝大多数人却以为这是C语言提供的功能,当是C语言的知识去学,那实际上是无穷无尽的知识,永远学不完,这样学C,怎么不入歧途!

授人以渔,不授人以鱼。
2014-11-18 13:31
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
正好又一个实例:
事实上用C编程根本就不是语法和语言的问题,而是对问题对象的熟悉程度,有些人根本就不懂硬件和系统基础,就硬去用C编程,解决不了,却以为是C没学好,殊不知其实是不懂硬件和系统操作。举个简单的、极常见的、坛上的确多次出现过的例子,很多人知道用system("pause")暂停等待,但知道这实际上是运行操作系统Command指令的就不多了,其实只要懂操作系统的基本操作和指令,这类用法是很容易想到的,但绝大多数人却以为这是C语言提供的功能,当是C语言的知识去学,那实际上是无穷无尽的知识,永远学不完,这样学C,怎么不入歧途!

授人以渔,不授人以鱼。
2014-11-18 13:31
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:10 
以下是引用TonyDeng在2014-11-18 13:31:11的发言:

正好又一个实例:

鞭辟入里 振聋发聩
2014-11-18 14:06
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:50 
Tony还真是好了伤疤忘了疼,前两天那两行丢人的代码要不要帮你翻出来再研究研究?整天就知道不知所云的说大话却一点真本事都没有,上面说的就好像你真会用几个命令似的,而且你这些废话能帮助楼主解决问题么?

一看见这些扯淡的废话就烦。还是说说楼主的疑问。

楼主的代码会输出6次"-"。原因:

1、父进程在i=0时启动一个子进程(设为1号子进行程),之后输出一个"-" ,在i=1时再启动一个子进程(2号),之后输出一个"-"。

2、子进程(1号)启动后复制父进程的栈(i=0),输出一个"-",之后i++,i=1时再启动一个子进程(3号),之后输出一个"-"。

3、子进程(2号)启动之后(i=1),输出一个"-",之后i++,i=2,退出循环进面结束进程。

4、子进程(3号)启动之后(i=1),输出一个"-",之后i++,i=2,退出循环进面结束进程。

综上,一共输出6个"-"。

如果将fork();与printf("-\n");这两句调换位置,则输出的是3个"-"。

楼主代码验证的只是fork函数复制进程的效果,事实上fork更有意思的一个特性在于它将返回两次(一次在父进程中,一次在子进程中)。

重剑无锋,大巧不工
2014-11-18 15:25
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:0 
围观....

三十年河东,三十年河西,莫欺少年穷!
2014-11-18 15:44
书生等待
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:8
帖 子:280
专家分:689
注 册:2013-2-22
收藏
得分:0 
回复 8 楼 beyondyf
T版比较喜欢讲原则性根本性的问题,就是这样的

谢谢B版细致解析,对进程线程理解不深,就看过一点书,后序再好好看看东西的
2014-11-18 20:39
快速回复:以下程序会输出几个“-”?请解释下原因
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.089132 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved