shared memory 사용시 이상한 점이 있습니다. 고수님들 부탁드립니다. 꾸벅
현재 shared memory를 이용해서 프로세서를 만들고 있습니다.
잠깐 구조를 보면
typedef struct _DATA_LIST
{
char filename[256];
char filesize[9];
} DATA_LIST;
typedef struct _AAA
{
int count; // data의 개수
DATA _LIST *data;
} AAA;
int main()
{
if( ( m_shmID = shmget( m_shmKey, m_size, flag ) ) < 0 )
{
...;
}
char *base=NULL;
1)------->>> base = (char *)shmat(m_shmID, (void *)NULL, 0 );
2)------->>> base = (char*)shmat( m_shmID, (const void *)0x50000000, 0 );
AAA *aaa;
aaa = (AAA*)base;
...;
3)----->>> fprintf(stderr, "count = [%d]\n", aaa->count);
4)----->>> fprintf(stderr, "filename = [%s]\n", aaa->data->filename);
}
2)------>>> 방법으로 shmaddr를 직접 지정을 해서 메모리를 생성하고 데이터를 넣고 다른 프로그램에서 attatch를 하면 문제가 없습니다.
헌데...
1)------> 이렇게 shmaddr에 NULL을 입력해서 attach를 하면(커널에서 반환하는 값) attach까지는 문제 없고,
3)------> 의 값 읽어 오는데도 문제가 없으나
4)------> 포인터 접근할 때 세그먼트폴트 에러가 발생이 됩니다.
FreeBSD OS에서는 1)--------> 방법으로 해도 문제가 발생이 안되는데 redhat linux에서는 오류가 발생이 됩니다. 데이터를 넣을때 address와 다른 곳에서 읽을 때의 address는 같은 값을 가지는 것을 확인 했습니다.
몇일 고생하다 이렇게 질문을 드립니다.
감사합니다.
댓글 달기