免费注册 查看新帖 |

Chinaunix

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

[C] 一个关于 fork的最基本问题的疑惑 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-08-13 19:37 |只看该作者 |倒序浏览
问题:变量在子进程和父进程中看来用了同样的地址空间,但是为什么在子进程中把该地址空间的值改变了,却对父进程中变量的值没有影响?

刚刚开始学习,非常疑惑,还望各位老大不吝赐教,谢谢!

代码如下:

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

int main ()
{
    pid_t pid;
    static int iStatic = 1;
    int iAuto = 1;
    int * iPtr;
    iPtr = &iStatic;
    switch(pid = fork())
    {
        case -1:
            return 1;
        case 0:
            iStatic += 1;
            iAuto += 1;
            *iPtr += 1;
            printf("%d\t%d\t%d\n",iStatic,iAuto,*iPtr);
            printf("%p\t%p\t%p\n",&iStatic,&iAuto,iPtr);
            break;
        default:
            wait(NULL);
            printf("%d\t%d\t%d\n",iStatic,iAuto,*iPtr);
            printf("%p\t%p\t%p\n",&iStatic,&iAuto,iPtr);
    }
    return 0;
}


输出结果如下:
3       2       3
0x80496bc       0xbff9f490      0x80496bc
1       1       1
0x80496bc       0xbff9f490      0x80496bc

论坛徽章:
0
2 [报告]
发表于 2008-08-13 19:52 |只看该作者
子进程只是copy了父进程的数据, 所以看上去是"相同"的地址,实际上却不是.

论坛徽章:
0
3 [报告]
发表于 2008-08-13 20:49 |只看该作者
父子进程没有在相同的地址空间,是公用代码。vfort()后的父子进程的空间是共用的

论坛徽章:
0
4 [报告]
发表于 2008-08-13 21:55 |只看该作者
子进程只是copy了父进程的数据,但父进程却不会依赖于子进程

论坛徽章:
0
5 [报告]
发表于 2008-08-13 23:29 |只看该作者
现在还是理解不了,看来还得看书。。。

论坛徽章:
0
6 [报告]
发表于 2008-08-13 23:50 |只看该作者
原帖由 prot 于 2008-8-13 23:29 发表
现在还是理解不了,看来还得看书。。。


简单地说,程序中的这个地址称为逻辑地址,而实际硬件上的称为物理地址,操作系统提供了一种机制将你的逻辑地址转换成物理地址。但是由于你是两个不同的进程,所以说在转换的时候虽然逻辑地址一样,但是得到的物理地址却不一样。虽然是父子进程,但是此时它们已经是两个独立的进程了。

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
7 [报告]
发表于 2008-08-14 09:38 |只看该作者
写时拷贝。

论坛徽章:
0
8 [报告]
发表于 2008-08-14 10:42 |只看该作者
相当于克隆

论坛徽章:
0
9 [报告]
发表于 2008-08-14 11:18 |只看该作者
谢谢大家!现在有点一知半解了

其实。。。还是不是特别明白,现在就是了解了一点点表象。

才上来就搞C看来有点难度。。。

[ 本帖最后由 prot 于 2008-8-14 11:21 编辑 ]

论坛徽章:
1
黑曼巴
日期:2020-02-27 22:54:26
10 [报告]
发表于 2008-08-14 18:10 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP