1
我正在嘗試編寫共享結構類型的代碼,但在嘗試寫入共享內存中的結構成員時出現分段錯誤,共享內存爲父母與子女之間的過程。正如我在代碼中顯示的那樣,我現在只是嘗試訪問struct成員,所以我可以稍後使用信號量進行同步。訪問共享內存中的結構成員「in C」
Thanx提前。
typedef struct file
{
char *shmPtr;
} file_entry;
int main (void)
{
int shmid;
int n;
file_entry *entries;
if (fork() == 0) {
/*wait for a while*/
if ((shmid = shmget(20441, sizeof(file_entry), 0666)) == -1) {
printf("shmget");
exit(2);
}
entries = (file_entry*) shmat(shmid, 0, 0);
if (entries->shmPtr == (char *) -1) {
printf("problem2");
exit(2);
}
printf("\nChild Reading ....\n\n");
printf("%s\n", entries->shmPtr[0]);
printf("%s\n", entries->shmPtr[1]);
putchar('\n');
printf("\nDone\n\n");
} else {
if ((shmid = shmget(20441, sizeof(file_entry), IPC_CREAT | 0666)) == -1) {
printf("problem3");
exit(2);
}
entries = (file_entry *) shmat(shmid, 0, 0);
if (entries->shmPtr == (char *) -1) {
printf("problem4");
exit(2);
}
printf("done attachment"); /*the parent prints this statment, then segmentation fault*/
entries->shmPtr[0]='a';
entries->shmPtr[1]='b';
putchar('\n');
wait();
shmdt(&shmid);
}
exit(0);
}
我會詳細說明,並說file_entry應該是char *的typedef。 – 2012-04-18 19:18:45
@ g.inozemtsev非常感謝你,解決了我的問題。 – CodeRed 2012-04-18 20:02:50