shmat할때...에러...

dracyula의 이미지

공유 메모리를 붙이려고...shmat를 사용하고 있는데요...

oltp_semid = semget(quesem,1,IPC_ALLOC|0666) ;
해서 id를 얻어오구....(quesem에는 0x5153454d 이란 값이 있습니다...)

oltp_memaddr = (char *)shmat(shmid,(void *)oltp_kernel_tbl->kernel_mem,0);
이렇게 쓰려고 합니다...
oltp_kernel_tbl->kernel_mem에는 메모리 주소를 지정해 주고요...

궁금한게...semget할때 IPC_ALLOC 인데...이건 뭐 할때 쓰는놈이죠?...
뭐 어쨋든...생성은 되니까...

그리고...shmat할때...계속 에러가 납니다....(void *)0으로 써주면 에러가 안납니다만...
꼭 지정해서 사용해야 하는 놈이기 때문에....

아시는분 제발 가르쳐 주세요...

park7275의 이미지

우선 꼭 지정해 쓴다고 하시는 얘기가 잘 이해가 안간다는..

현재 shmat 에서 리턴하는 값은 주소값입니다....
the address of the attached shared memory segment

char *로 쓰이는 내용은 보통 하나의 byte를 지정하는 pointer일듯합니다.

그렇다면 long(i386 shmat_do는 long을 return합니다.)형의 주소와 문제가 있을듯합니다.

shmat()의 prototype에서도 void*인데. 이것은 뭐 주소체계가 다를수 있어서 일듯하네요.
에러에 대한 자세한 내막은 모르겠지만.

이부분의 문제가 아닐까 생각됩니다.

[KILL] 죽을각오로.........

[KILL] 죽을각오로.........