linux 공유 메모리 예제

linux 공유 메모리 예제

첫 번째 예제는 터미널 접근 방식을 취합니다. 코드 예제는 내 웹 사이트의 ZIP 파일에서 사용할 수 있습니다. memwriter 및 memreader 프로그램 모두에서 주요 관심사의 공유 메모리 함수는 shm_open 및 mmap입니다. shm_open에 대한 호출은 memwriter 프로그램이 공유 메모리를 만든다는 점을 제외하고는 두 프로그램에서 비슷하지만 memreader는 이미 만든 메모리에만 액세스합니다: shmat(): 공유 메모리 세그먼트를 사용하기 전에 직접 연결해야 합니다. shmat()를 사용합니다. 보이드 *shmat (int shmid, 보이드 * shmaddr, int shmflg); shmid는 공유 메모리 ID입니다. shmaddr는 사용할 특정 주소를 지정하지만 0으로 설정해야하며 OS는 자동으로 주소를 선택합니다. shmat을 사용하여 shmid로 식별된 공유 메모리 세그먼트를 호출 프로세스의 주소 공간에 연결하면 대기가 끝나면 memreader는 공유 메모리에서 ASCII 바이트를 읽고 정리하고 종료합니다. 서버 프로그램은 클라이언트에서 사용할 공유 메모리 세그먼트를 할당해야 하므로 클라이언트를 실행하기 전에 서버를 실행해야 합니다. 이 작업을 수행하는 한 가지 방법은 창에서 서버를 시작한 다음 두 번째 창으로 이동하여 클라이언트를 시작하는 것입니다.

mmap() 함수는 액세스 및 사용 권한을 제어하기 위해 고도로 사용자 정의 가능한 매개 변수를 사용하여 메모리 버퍼를 할당하고 필요한 경우 파일 시스템 저장소로 백업하는 데 사용할 수 있습니다. 이 예제에서는 서버와 클라이언트가 별도의 프로세스입니다. 첫째, 공유 메모리를 통한 순진한 의사 소통 체계가 설정됩니다. 공유 메모리는 하나의 상태 변수 상태와 4개의 정수 배열로 구성됩니다. 변수 상태는 데이터 영역이 아직 데이터로 채워지지 않은 경우 NOT_READY 값을 가지며, 서버가 공유 메모리에 데이터를 입력한 경우 채워지고 클라이언트가 공유 메모리의 데이터를 가져온 경우 촬영합니다. 정의는 다음과 같습니다. 이 파일을 다운로드하려면 여기를 클릭하십시오 (shm-02.h). 다음은 memwriter 및 memreader 프로그램이 공유 메모리를 통해 통신하는 방법에 대한 개요입니다: 세마포 자전거 예제에 대한 작은 수정 초기 값을 100으로 초기화해야 합니다. 자전거를 빌릴 때마다 값이 감소하므로 자전거가 반환 될 때마다 더 이상 자전거를 빌릴 수 없으므로 0에서 값이 증가하면 100에서 더 이상 자전거가 없습니다 .

: 공유 메모리에서 분리하면 소멸되지 않습니다. 그래서, shmctl()을 파괴하는 것이 사용된다. shmctl (int shmid, IPC_RMID, NULL); 서버와 클라이언트가 현재 디렉터리에 있다고 가정합니다. 서버는 ftok()를 사용하여 키를 생성하고 공유 메모리를 요청하는 데 사용합니다. 공유 메모리가 데이터로 채워지기 전에 상태가 NOT_READY로 설정됩니다. 공유 메모리가 채워진 후 서버는 상태를 채우는 상태로 설정합니다. 그런 다음 서버는 상태가 TAKEN될 때까지 대기하므로 클라이언트가 데이터를 가져온 것입니다. Linux 시스템은 공유 메모리에 대해 레거시 시스템 V API와 최신 POSIX API의 두 가지 별도 API를 제공합니다.

0

You may also like