구조체 유형을 공유하는 코드를 작성하려고하지만 공유 메모리의 구조체 멤버에 tryign을 쓰면 세그먼트 화 오류가 발생합니다. 공유 메모리는 다음과 같습니다. 부모 프로세스와 자식 프로세스 사이. 코드에서 보여주는 메신저로, 지금은 구조체 멤버에 액세스 할 수 있습니다. 그래서 나중에 동기화를 위해 세마포를 사용할 수 있습니다."C"의 공유 메모리에서 구조체 멤버에 액세스
고지.
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되어야한다고 말하고 싶습니다. –
@ g.inozemtsev 대단히 고마워, 그게 내 문제를 해결했다. – CodeRed