물론 앞서 말했듯이, 당신은 단지 chars 외에 거기에 다른 데이터를 가질 수 있습니다. 난 그냥 예를 들어 그들을 사용 하 고. C의 포인터에 익숙하다고 가정하면 어떤 종류의 데이터를 사용할 수 있는지 가정합니다. 그것은 모두 무엇을 의미 합니까? 음, shmid는 shmget ()에 대한 호출에서 얻은 공유 메모리 ID입니다. 다음은 shmat() 어떤 특정 주소를 사용할지 알려주는 shmaddr이지만 0으로 설정하고 OS가 주소를 선택하도록 해야 합니다. 마지막으로 shmflg는 SHM_RDONLY에서만 읽으려는 경우 0으로 설정할 수 있습니다. 평소와 같이 조심해야 할 것이 더 많지만 장기적으로는 매우 쉽습니다. 참조, 당신은 단지 공유 메모리 세그먼트에 연결하고 메모리에 대한 포인터를 얻을. 이 포인터를 읽고 쓸 수 있으며 모든 변경 사항은 세그먼트에 연결된 다른 모든 사람에게 표시됩니다. 더 간단한 것은 없습니다. 글쎄, 실제로,하지만 난 그냥 당신을 더 편안하게하기 위해 노력하고 있었다. 첫 번째 인수인 키는 공유 메모리 세그먼트를 인식합니다.

키는 임의의 값이거나 라이브러리 함수 ftok()에서 파생될 수 있는 값일 수 있습니다. 키는 IPC_PRIVATE, 즉 서버 및 클라이언트(상위 및 자식 관계) 즉 상호 관련 프로세스 통신으로 프로세스를 실행하는 것을 의미할 수도 있습니다. 클라이언트가 이 키와 함께 공유 메모리를 사용하려면 서버의 자식 프로세스여야 합니다. 또한 부모가 공유 메모리를 얻은 후 자식 프로세스를 만들어야 합니다. IPC_INFO – buf가 가리키는 구조의 공유 메모리 제한 및 매개 변수에 대한 정보를 반환합니다. shmctl () : 공유 메모리에서 분리하면 파괴되지 않습니다. 그래서, shmctl()을 파괴하는 것이 사용된다. shmctl (int shmid, IPC_RMID, NULL); 그리고 밤모! 공유 메모리 세그먼트에 대한 포인터가 있습니다! shmat()은 void 포인터를 반환하며 이 경우 이를 char 포인터로 처리하고 있습니다. 당신은 당신이 거기에 있는 데이터의 종류에 따라 당신이 좋아하는 무엇이든으로 취급 할 수 있습니다. 구조의 배열에 대한 포인터는 다른 어떤 것과도 마찬가지로 허용됩니다. shmget(): int shmget (key_t, size_tsize, intshmflg); 성공적으로 완료되면 shmget()은 공유 메모리 세그먼트에 대한 식별자를 반환합니다. 첫 번째 인수인 shmid는 공유 메모리 세그먼트의 식별자입니다.

이 ID는 shmget() 시스템 호출의 반환 값인 공유 메모리 식별자입니다. 공유 메모리는 둘 이상의 프로세스 간에 공유되는 메모리입니다. 그러나 메모리 나 다른 통신 수단을 공유해야하는 이유는 무엇입니까? 두 개의 프로세스를 만드는 데 하나는 공유 메모리(shm_write.c)에 쓰는 것이고 다른 하나는 공유 메모리(shm_read.c)에서 읽기 위한 것이며, 위의 호출은 다른 사람이 연결되지 않았다고 가정하여 공유 메모리 세그먼트를 삭제합니다.