将阵列附加到共享内存

时间:2018-08-28 12:19:23

标签: c shared-memory

我已经从.txt文件中读取行,现在希望将数组/字符串附加到内存中,以便可以使用它进行访问。我想我所掌握的一切正确?我能够将行放入数组中,并使用words[0]进行访问。我只是不确定如何通过共享内存访问它们。.我想我需要在if..else ..的最后一行代码中做一些事情,我似乎无法弄清楚。

int main() {
    const key_t key = 12345678;
    FILE *ptr_fp;
    char words[600][600];
    int i = 0;  
    ptr_fp = fopen("messages.txt","r");    

    int shmid = shmget(key, sizeof(float) * 8, 0644 | IPC_CREAT);
    printf("Created a shared memory segment of 32 bytes.\n");


    if (ptr_fp != NULL){
        while(fgets(words[i],600,ptr_fp )&& i <600){
            i++;
        }
    }

    /*for (int j = 0; j < i; j++){
        printf("%s",words[j]);
        if(j == 3){
            printf("\n");
        }
    }*/

    if (shmid < 0) {
        perror("shmget");
        exit(1);
    } else {
        char *addr = shmat(shmid, 0, 0);
        if (addr == (char *)(-1)) {
            perror("shmat error");
            exit(1);
        } else {
            printf("Shared memory attached at address %p\n", addr);
        }
    }
    return 0;
}

1 个答案:

答案 0 :(得分:2)

如果要使数组位于共享内存中,则数组的第一个字节必须是shmat返回的地址。

您似乎正在填充阵列,然后尝试“告诉某事”要共享的阵列。

以这种方式工作会很方便,但是没有。

我想您可以将数组中的字节复制到共享内存段,但这很浪费。

编辑1

随着您对共享内存的使用越来越熟悉,并且用例变得越来越复杂(例如,Oracle的共享内存段),您将需要注意以下John Bollinger的评论。