源代码放到了三个文件中:

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

includeall.h

#include "includeall.h"
int my_sum(int a,int b)//calculate the sum from a to b
{
int sum=;
int i;
for(i=a;i<=b;++i)
{
sum+=i;
}
return sum;
}

function.c

 #include "includeall.h"
int my_sum(int,int);
int a,b,c;
int main()//calculate the sum from 1 to 100
{
int pid1,pid2;
int * pointa=&a;
int * pointb=&b;
pid1=fork();
if(pid1==)
{
*pointa=my_sum(,);
printf("pointa: %p\n",pointa);
printf("*pointa: %d\n",*pointa);
printf("pointb: %p\n",pointb);
printf("*pointb: %d\n",*pointb);
//return (a);
}
else{
pid2=fork();
if(pid2==)
{
*pointb=my_sum(,);
printf("pointa: %p\n",pointa);
printf("*pointa: %d\n",*pointa);
printf("pointb: %p\n",pointb);
printf("*pointb: %d\n",*pointb);
//return (b);
}
else{
wait();
wait();
c=(*pointa)+(*pointb);
printf("finished\n");
printf("sum (from 1 to 100): %d\n",c);
}
}
return ;
}

main.c

程序一运行的时候一共有三个进程,两个子进程分别负责计算1~50的和 和51~100 的和,父进程负责统计这两个子进程的计算结果。

由于对进程间的通信不熟练,于是想到了使用指针的方式。实际运行的时候两个指针变量在三个进程间的值确实是一样的(正如期望的那样),但是在一个进程中通过间接访问的方式对指针指向的内存单元的值进行修改后,在其它进程中使用间接访问的方式取得的值却并不是修改后的(它们的执行顺序没错,是先修改后读取的)。怪哉!

猜测可能是操作系统对进程进行隔离造成的,即我们打印出来的内存的地址相同,但不意味着实际对应的内存单元就相同。

内功不足,只是猜测

由linux下的多进程编程引发的关于进程间隔离的思考的更多相关文章

  1. Linux下的多进程编程

    1.进程 1.1进程的定义 <计算机操作系统>这门课对进程有这样的描述:进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统 ...

  2. Linux下的C编程实战

    Linux下的C编程实战(一) ――开发平台搭建 1.引言 Linux操作系统在服务器领域的应用和普及已经有较长的历史,这源于它的开源特点以及其超越Windows的安全性和稳定性.而近年来, Linu ...

  3. Linux下TCP网络编程与基于Windows下C#socket编程间通信

    一.linux下TCP网络编程基础,需要了解相关函数 Socket():用于套接字初始化. Bind():将 socket 与本机上的一个端口绑定,就可以在该端口监听服务请求. Listen():使s ...

  4. Linux下C语言编程实现spwd函数

    Linux下C语言编程实现spwd函数 介绍 spwd函数 功能:显示当前目录路径 实现:通过编译执行该代码,可在终端中输出当前路径 代码实现 代码链接 代码托管链接:spwd.c 所需结构体.函数. ...

  5. linux下的c编程

    linux下的c编程 Linux 系统上可用的 C 编译器是 GNU C 编译器, 它建立在自由软件基金会的编程许可证的基础上,因此可以自由发布.GNU  C 对标准 C 进行一系列扩展,以增强标准 ...

  6. Linux基础与Linux下C语言编程基础

    Linux基础 1 Linux命令 如果使用GUI,Linux和Windows没有什么区别.Linux学习应用的一个特点是通过命令行进行使用. 登录Linux后,我们就可以在#或$符后面去输入命令,有 ...

  7. LINUX下C语言编程基础

    实验二 Linux下C语言编程基础 一.实验目的 1. 熟悉Linux系统下的开发环境 2. 熟悉vi的基本操作 3. 熟悉gcc编译器的基本原理 4. 熟练使用gcc编译器的常用选项 5 .熟练使用 ...

  8. LINUX下C语言编程调用函数、链接头文件以及库文件

    LINUX下C语言编程经常需要链接其他函数,而其他函数一般都放在另外.c文件中,或者打包放在一个库文件里面,我需要在main函数中调用这些函数,主要有如下几种方法: 1.当需要调用函数的个数比较少时, ...

  9. Linux下C语言编程基础学习记录

    VIM的基本使用  LINUX下C语言编程 用gcc命令编译运行C语言文件 预处理阶段:将*.c文件转化为*.i预处理过的C程序. 编译阶段:将*.i文件编译为汇编代码*.s文件. 汇编阶段:将*.s ...

随机推荐

  1. ArcGIS Engine开发的ArcGIS 版本管理的功能

    原文:ArcGIS Engine开发的ArcGIS 版本管理的功能 转自:http://blog.csdn.net/linghe301/article/details/7965901 这是以前的Arc ...

  2. ecshop详细的安装教程

    ECShop 的安装非常简单.方便,任何一种编码程序的安装方法都是一样的(即 GBK 和 UTF-8 版本的安装方法是一样的) 1.安装前的准备 docs目录下存放有 ECShop 安装说明(inst ...

  3. Cupid's Arrow---hdu1756(判断点与多边形的位置关系 模板)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1756 题意:中文题,套模板即可: /* 射线法:判断一个点是在多边形内部,边上还是在外部,时间复杂度为 ...

  4. The Four Stages of Recovering a Project

    If a project is in trouble, the project manager needs to work to recover it and get the schedule bac ...

  5. 【转】github更新自己Fork的代码

    github更新自己Fork的代码 时间 2014-03-02 23:25:55  micmiu - 软件开发 原文  http://www.micmiu.com/software/build/git ...

  6. java第一课堂

    java第一课堂视频请在优酷搜索java第一课堂即可

  7. iOS中Objective-C与JavaScript之间相互调用的实现(实现了与Android相同的机制)转

    第三方库WebViewJavascriptBridge http://blog.csdn.net/zhaoxy_thu/article/details/22794201 Demo

  8. 微信接口请求万能函数http_request

    关键字:http_request http_request post get http request原文: http://www.cnblogs.com/txw1958/p/http_request ...

  9. UIControl事件

    1.UIControlEventTouchDown 单点触摸按下事件:用户点触屏幕,或者又有新手指落下的时候. 2.UIControlEventTouchDownRepeat 多点触摸按下事件,点触计 ...

  10. mysql参数sql_log_bin

    如果想在主库上执行一些操作,但不复制到slave库上,可以通过修改参数sql_log_bin来实现. 比如想在主库上修改某个表的定义,但是在slave库上不做修改: master mysql> ...