在进程之间共享和访问二维数组

时间:2015-06-09 22:57:26

标签: c multidimensional-array process shared-memory

我有一个结构Data的二维数组,必须进行初始化。主程序创建1个服务器和4个客户端。所有进程都应该能够访问和修改数据(我已经使用信号量处理了同步问题)。程序的每个部分都位于单独的.c文件中。如何初始化,共享和访问/修改我的数据(如何在server()client()中访问结构的字段?)我目前正在使用System V,但如果更合适,可以使用Posix。

/*  project.h   */
typedef struct Data {
    int fieldA;
    int fieldB;
    int fieldC;
    int fieldD;
} Data;

extern Data data[4][3];
extern int shm;
extern Data *p;
/*  main.c  */
#include "project.h"

Data *p;
int shm;

void main()
{
    int i;

    shm = shmget(IPC_PRIVATE, 3*4*sizeof(Data), 0666);
    p = (Data *) shmat(shm, NULL, 0);

    for (i=1;i<5;i++) {
        if (fork() == 0) {
            client(i);
        }
    }

    if (fork() == 0) {
        server();
    }
}
/*  server.c    */
#include "project.h"

// I only care about the first field of Data when I initialize.
Data data[4][3] = { {{0},{1},{-1}},
                    {{2},{-1},{-1}},
                    {{5},{0},{3}},
                    {{-1},{6},{-1}} };

void server()                   
{
    /*  read / modify the data  */
}
/*  client.c    */
#include "project.h"

void client(int i)                  
{
    /*  read / modify the data  */
}

0 个答案:

没有答案