[질문] shared memory, message queue 사용시..

익명 사용자의 이미지

1) 현재 사용중인 shared memory나 message queue상태를 확인하는 쉘프로
그램이 머지요??

2) message queue나 shared memory 모두 시스템내에서 유일한 식별번호
(key)가 필요하다고 알고 있는데요..
이 번호를 어떻게 정해서 사용해야 하나요??
현재 시스템내에서 사용중인지.. 아닌지 어떻게 미리 알고, 그 key를 정
할 수 있는 지 궁금합니다

익명 사용자의 이미지

man ipcs

익명 사용자의 이미지

쉐어드 메모리상태를 보는것은 아래와 같고

#ipcs

------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x30010000 524288 shmman 666 8482080 0
0x30020000 622593 shmman 666 7706400 0
0x30030000 688130 shmman 666 69440 0
0x30040000 720899 shmman 666 836000 0
0x30090000 851972 shmman 666 504356 0
0x30050000 557061 shmman 666 59040 0
0x30070000 589830 shmman 666 59040 0
0x30060000 655367 shmman 666 78720 0

------ Semaphore Arrays --------
key semid owner perms nsems status

------ Message Queues --------
key msqid owner perms used-bytes messages

#ipcrm
usage ipcrm [shm | msg | sem] id
처럼 삭제하는 함수도 있습니다.

키에 관한것은 난수로 발생시켜서 생성한 다음
사용하기 전에 그 key로 조회해본 다음
이미 존재하지 않으면 사용해도 되고
(이미 존재한다면 그 키로 아이디를 조회했을때
id값이 나올테고 아니면 에러를 리턴하겠죠..)

또 그냥 상수처럼 일정한 값을 정해서 사용하면
되지요.. 저같은 경우엔 필수적인 것은 후자의 방법을 사용하고,
임시적인 ipc같은 경우엔 난수발생으로 키를 얻지요..

그리고 ipc프로그래밍의 예제가..
http//www.joinc.co.kr/modules.php?name=News&file=article&sid=32
이글을 보시면 도움이 될듯하고요..

http//www.ezdoum.com/stories.php?story=02/05/19/5694616

ipc관련 함수도 그냥 system에서 제공하는 함수를
사용하시는거보다 적당히 랩핑해서 사용하는게 좋습니다.

저는 아래와 같이 랩핑함수를 만들어서 사용합니다.

char *Attachshm(shmid,shmaddr,flag)
int Detachshm(vaddr)
int Getshmid(shmkey)
int Makeshm(shmkey,nbyte)
int Removeshm(shmkey)

익명 사용자의 이미지

다른 wrapping함수들은 알겠는데..
Getshmid(shmkey)는 어떻게 구현이 되져??
하는 일은 알겠는데, 안에서 shmget()함수를 호출한다면, size가 필요한데, size는 랩핑함수의 파라미터로 전달이 안되는데.. 특별한 방법이 있는지 궁금합니다.