서로 다른 프로세스간에 정보를 공유하는 프로그램을 구현해야합니다.공유 메모리 세그먼트에 액세스 할 때 분할 오류가 발생했습니다.
하지만 공유 구조의 멤버에 액세스하려고하면 세그먼트 오류가 발생합니다.
어떻게 해결할 수 있습니까? 아래 내 코드를 참조하십시오.
소스 파일 :
#include <string.h>
#include <stdio.h>
#include "ShM.h"
#define SHM_SIZE 1024
int main(){
stablishMemory();
Deck *deck = obtainMemory();
strncpy(deck->cards,"carlos",SHM_SIZE);
unlinkMemory();
return 0;
}
헤더 파일 (ShM.h) :이 구조 자체에 포함되지
#include <stdio.h>
#include <string.h>
#include <sys/shm.h>
#include <unistd.h>
int idMemory;
typedef struct {
char *cards;
}Deck;
Deck* letra;
#define SHM_SIZE 1024
void stablishMemory(){
idMemory = shmget (obtainkey(), SHM_SIZE, 0777| IPC_CREAT);
letra = (Deck*)shmat (idMemory, NULL,0);
}
key_t obtainkey(){
return ftok("/bin/ls",24);
}
void unlinkMemory(){
shmdt((Deck*)letra);
}
Deck* obtainMemory(){
return letra;
}
void destroyMemory(){
shmctl(idMemory, IPC_RMID, (struct shmid_ds*)NULL);
unlink(" ");
}
을 오류가 있는지 확인하고 있지 않습니다. – o11c
@ o11c 어떤 종류의 오류가 있습니까? 'ftok','shmget'와 같은 – cafej
함수는 모두 오류를 반환 할 수 있습니다. 오류 점검은 선택 사항이 아닙니다. – o11c