我如何在C程序之间共享变量的值

时间:2013-06-03 09:02:43

标签: c ipc

我需要共享一个变量的值,该值在一个程序中被修改以反映在另一个程序中。所以我做了以下操作。

  1. 创建了一个头文件:

    /* file1.h */
    extern int a = 0;
    
  2. 创建了一个C文件:

    /* file2.c */    
    #include"file1.h"
    #include<stdio.h>
    int main()
    {
        a = 15;
        printf("%d",a);
        return 0;
    }
    
  3. 创建了另一个C文件:

    /* file3.c */
    #include"file1.h"
    #include<stdio.h>
    int main()
    {
        printf("%d",a);
        return 0;
    }
    
  4. 我希望file3.c程序打印值15,但它将输出设为0。 如何在file3.c程序中获取值?

2 个答案:

答案 0 :(得分:5)

你的代码做错了什么;你试图在两个进程之间共享一个变量,但你所做的是在两个源文件之间共享,因此将变量声明为extern肯定对你没有帮助;因为如果在一个进程中你想要将一个源文件中的变量暴露给其他源文件,那就是你所做的。

在UNIX系统中称为共享内存的一种自然方式是在两个(或多个)进程(程序)之间共享变量。

请查看此链接以获取介绍。 http://www.cs.cf.ac.uk/Dave/C/node27.html

编辑: 当然,进程间通信(两个进程如何相互通信)不仅限于共享内存,您还可以通过套接字或通过管道共享变量

答案 1 :(得分:2)

仅通过包含文件来共享变量是不可能的。您将运行的两个可执行文件将以两个不同的进程结束,每个进程都有自己的内存空间。因此,您无法通过包含标题进行通信。您必须使用您正在使用的操作系统提供的ipc机制之一。 像unix中的共享内存或非常简单的管道。