共享内存 - Struct中的结构数组

时间:2018-02-20 10:56:29

标签: c arrays struct ipc shared-memory

我想在多个进程之间共享一个结构列表,并将它们包装到另一个结构中,这样我就可以轻松跟踪我的计数和大小。

首先,我创建结构并将共享内存分配给它们。

#define LEN 20
typedef struct msg_struct{
    int   id;
    char  topic[64];
};

typedef struct msg_list{
    int max;
    int cur_index;
    struct msg_struct* data;
};

struct msg_list* allocate_list_memory(key_t key){

    int id = shmget(key, LEN * sizeof(struct msg_struct), IPC_CREAT | 0666);
    struct msg_struct* struct_list = (struct msg_struct*)shmat(id, NULL, 0);

    int id2 = shmget(key+1, sizeof(struct msg_list), IPC_CREAT | 0666);
    struct msg_list* list = (struct msg_list*)shmat(id2, NULL, 0);

    list->max = (int)LEN;
    list->data = struct_list;
    return list;
}

void add_to_memory(struct msg_list* list, struct msg_struct* msg) {

    //if we have space left just write to it
    if(list->cur_index < list->max) {
        list->data[list->cur_index].id == msg->id;
        list->data[list->cur_index].topic = msg->topic;
        list->cur_index++;
    }
    ....
}

另一种方法是将一个给定的msg obejct添加到我的消息列表中。

main(int argc, char *argv[]) {

    char* result = NULL;

    struct msg_struct* msg;
    msg = (struct msg_struct*)malloc(sizeof(struct msg_struct));

    msg->id = 123;
    strncpy(msg->topic, "TEST", 10);

    struct msg_list* list = allocate_list_memory(1111);

    add_to_memory(list, msg);
    ....
 }

我的add_to_memory函数正在抛出一个SIGSEGV,我真的不知道为什么。其他示例和教程并没有真正帮助我正确地做到这一点。

0 个答案:

没有答案