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는 같은 값을 가지는 것을 확인 했습니다.
몇일 고생하다 이렇게 질문을 드립니다.
감사합니다.

