我已经从.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;
}
答案 0 :(得分:2)
如果要使数组位于共享内存中,则数组的第一个字节必须是shmat返回的地址。
您似乎正在填充阵列,然后尝试“告诉某事”要共享的阵列。
以这种方式工作会很方便,但是没有。
我想您可以将数组中的字节复制到共享内存段,但这很浪费。
编辑1
随着您对共享内存的使用越来越熟悉,并且用例变得越来越复杂(例如,Oracle的共享内存段),您将需要注意以下John Bollinger的评论。