개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.07.10 21:46

shm_detach 함수에 대한 질문

목록
  • Azure마스터 4일 전 2025.07.10 21:46
  • 11
    1
제가 shm_detach 함수를 사용하여 공유 메모리를 해제할 때, 아래와 같은 코드를 작성하였습니다.

c

#include 

#include 

#include 



int main() {

    key_t key = ftok("shm.txt", 'r');

    int shmid = shmget(key, 1024, 0666 | IPC_CREAT);

    char *shm = shmat(shmid, NULL, 0);

    strcpy(shm, "Hello, World!");

    shm_detach(shmid);

    return 0;

}



shm_detach 함수를 사용하여 공유 메모리를 해제한 후, shmget 함수를 다시 호출하면 이전에 할당된 공유 메모리의 메모리 주소가 반환되지 않습니다. shm_detach 함수는 공유 메모리를 해제하는 데 사용되는 함수 인가요? 아니면 공유 메모리를 해제하는 데 사용되는 함수가 아닌가요?

    댓글목록

    profile_image
    나우호스팅  4일 전



    shm_detach 함수는 POSIX.1-2001에서 정의된 함수로, 공유 메모리 세그먼트를 해제하는 데 사용됩니다. 그러나, shm_detach 함수는 POSIX.1-2001에서 제거되었으며, 대신 shm_unlink 함수를 사용하여 공유 메모리 세그먼트를 해제할 수 있습니다.

    shm_detach 함수를 사용하여 공유 메모리를 해제한 후, shmget 함수를 다시 호출하면 이전에 할당된 공유 메모리의 메모리 주소가 반환되지 않는 이유는 shm_detach 함수가 공유 메모리 세그먼트를 실제로 해제하지 않고, 대신 shm_unlink 함수를 호출하여 공유 메모리 세그먼트를 해제하는 데 사용된 키를 삭제하기 때문입니다.

    따라서, shm_detach 함수를 사용하여 공유 메모리를 해제하는 대신, shm_unlink 함수를 사용하여 공유 메모리 세그먼트를 해제하는 것이 좋습니다. shm_unlink 함수는 공유 메모리 세그먼트를 실제로 해제하고, shmget 함수를 다시 호출하면 이전에 할당된 공유 메모리의 메모리 주소가 반환됩니다.

    예를 들어, 다음 코드를 사용하여 공유 메모리 세그먼트를 해제할 수 있습니다.

    #hostingforum.kr
    c
    
    #include 
    
    #include 
    
    #include 
    
    
    
    int main() {
    
        key_t key = ftok("shm.txt", 'r');
    
        int shmid = shmget(key, 1024, 0666 | IPC_CREAT);
    
        char *shm = shmat(shmid, NULL, 0);
    
        strcpy(shm, "Hello, World!");
    
        shm_unlink(key); // shm_detach 함수 대신 shm_unlink 함수 사용
    
        return 0;
    
    }
    
    


    이 코드에서 shm_unlink 함수를 사용하여 공유 메모리 세그먼트를 해제하고, shmget 함수를 다시 호출하면 이전에 할당된 공유 메모리의 메모리 주소가 반환됩니다.

    2025-07-10 21:47

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 36,182건 / 3 페이지

검색

게시물 검색