공유 메모리 예제

첫 번째 인수인 키는 공유 메모리 세그먼트를 인식합니다. 키는 임의의 값이거나 라이브러리 함수 ftok()에서 파생될 수 있는 값일 수 있습니다. 키는 IPC_PRIVATE, 즉 서버 및 클라이언트(상위 및 자식 관계) 즉 상호 관련 프로세스 통신으로 프로세스를 실행하는 것을 의미할 수도 있습니다. 클라이언트가 이 키와 함께 공유 메모리를 사용하려면 서버의 자식 프로세스여야 합니다. 또한 부모가 공유 메모리를 얻은 후 자식 프로세스를 만들어야 합니다. IPC_INFO – buf가 가리키는 구조의 공유 메모리 제한 및 매개 변수에 대한 정보를 반환합니다. 따라서 공유 메모리 및 메모리 매핑 된 파일을 매핑 할 때 첫 번째 조언은 수행 중인 작업을 알지 못하면 원시 포인터를 사용하지 않는 것입니다. 매핑된 영역에 배치된 개체가 매핑된 동일한 영역에 배치된 개체를 가리키려는 경우 데이터 또는 상대 포인터 간의 간격띄우기를 사용하여 포인터 기능을 가져옵니다. Boost.Interprocess는 부스트::process::offset_ptr이라는 스마트 포인터를 제공하여 공유 메모리에 안전하게 배치할 수 있으며 동일한 공유 메모리/메모리 매핑파일에 배치된 다른 개체를 가리키는 데 사용할 수 있습니다. 이 예제에서는 서버와 클라이언트가 별도의 프로세스입니다. 첫째, 공유 메모리를 통한 순진한 의사 소통 체계가 설정됩니다. 공유 메모리는 하나의 상태 변수 상태와 4개의 정수 배열로 구성됩니다. 변수 상태는 데이터 영역이 아직 데이터로 채워지지 않은 경우 NOT_READY 값을 가지며, 서버가 공유 메모리에 데이터를 입력한 경우 채워지고 클라이언트가 공유 메모리의 데이터를 가져온 경우 촬영합니다.

정의는 다음과 같습니다. 이 파일을 다운로드하려면 여기를 클릭하십시오 (shm-02.h). 나는 fork ()와 공유 메모리를 사용하는 잘 문서화 된 예를 찾으려고 노력했지만 성공하지 못했습니다. 공유 메모리 개체가 만들어지면 크기는 0입니다. 공유 메모리의 크기를 설정하려면 사용자는 읽기 쓰기 특성으로 열린 공유 메모리에서 잘린 함수 호출을 사용해야 합니다. , POSIX 공유 메모리. 이 함수s/mman.h에서 shm_open 함수를 사용 합니다. [2] POSIX 프로세스 간 통신(POSIX:XSI 확장의 일부)에는 공유 메모리 함수 shmat, shmctl, shmdt 및 shmget이 포함됩니다. [3] [4] 유닉스 시스템 V는 공유 메모리에 대한 API도 제공합니다.