shmat에 관한 질문입니다.
글쓴이: ky1031 / 작성시간: 금, 2004/05/14 - 4:03오후
--- some_fun() ----------------------------------------------------------------
some_struct * some_fun()
{
if ((ShmId = shmget((key_t)some_value, sizeof(some_struct), IPC_PRIVATE)) < 0)
{
if ((ShmId = shmget((key_t)some_value, sizeof(some_struct), 0666 | IPC_CREAT)) < 0)
{
return NULL;
}
}
return((somestruct *)shmat(ShmId, (char *)0, 0)));
}
--------------------------------------------------------------------------------
위와같은 함수가 있을때여 이함수를 10번정도 부른다고 예를 들었을때
같은 id로 shmat를 했는데여
다른곳에 메핑이되는지 그러니까 some_struct구조체크기만큼 10개가 생기는건지... 아니면 이미 존재하면 그냥 존재하는 주소값을 넘겨주는건지 궁금합니다.
Forums:
하나의 key에는 하나의 메모리 블럭...
하나의 key에는 하나의 메모리가 할당됩니다.
게다가 두번째 get할 블럭의 크기가 첫번째 get할때의 크기보다 크면 error가 납니다.
같은 key를 가진 shared memory에서 두번째로 불리는 shmget 함수는 같이 프로세스 여부를 떠나서 새로 메모리를 할당받는 것이 아니기 때문입니다.
그런데 shmat는 10번째 해본적이 없어서 어찌될지는 잘모르겠네요. 서로 다른 주소지만 (가상메모리상으로는) 실제로 같은 physical memory를 공유할 것 같습니다.
댓글 달기