mmap 예제


0 Flares Filament.io 0 Flares ×

예! 간단한 예로 몇 바이트만 예약하고 자식 프로세스를 종료할 때 공유 메모리의 값을 변경할 수 있습니다. 익명 메모리를 공유하는 것은 복사, 시스템 호출 또는 디스크 액세스 오버헤드가 없기 때문에 프로세스 간 통신의 매우 효율적인 형태입니다. 자세한 mmap() 참조는 mmap Easy – 파일 없이 mmap 사용 – MAP_ANONYMOUS 및 MAP_SHARED 옵션을 지정하기 만 하면 됩니다. mmap() 및 munmap() 함수는 sys/mman.h 라이브러리에서 제공합니다. 그래서 사용하려면 아래와 같이 포함시켜야합니다. sys/stat.h POSIX 헤더의 mmap()을 사용하여 읽기(쓰지 않음)를 위해 파일을 매핑하려고 합니다. 인터넷에서 간단한 베어 예제를 찾을 수 없습니다. 위의 구현은 최소한의 예일 뿐이므로 오류를 제대로 확인하지 못합니다. 이 예제에서는 현재 컴파일 중인 파일의 현재 줄 번호와 파일 이름을 포함하는 전처리기 상수 “LINE” 및 “FILE”도 보여 주며, 이 예제에서는 현재 컴파일중인 파일의 현재 줄 번호와 파일 이름을 보유합니다. 리눅스, 맥 OS X 및 BSD에서 mmap매핑의 여러 유형을 만들 수 있습니다. 다른 운영 체제는 이러한 하위 집합만 지원할 수 있습니다., 예를 들어, 공유 매핑 글로벌 VFS 또는 I/O 캐시 없이 운영 체제에서 실용적이지 않을 수 있습니다. 여기에서 또 다른 리눅스 예 메모리 매핑의 윈도우 구현.

다음은 최소 mmap() 기반 cat 구현입니다. 그것은 효율적이지 않지만 중요한 개념을 보여줍니다. 그것은 이 이전 포스트 mmap에서 stat()기반 getFilesize() 함수를 사용하고 관련 시스템 호출은 유닉스의 버클리 소프트웨어 배포 (BSD) 버전의 일부로 설계되었습니다. 해당 API는 해당 릴리스에서 구현되지 않았음에도 불구하고 4.2BSD 시스템 설명서에 이미 설명되어 있습니다. [1] 썬 마이크로 시스템은 SunOS 운영 체제에서 이 API를 구현했습니다. U.C. 버클리의 BSD 개발자들은 Sun에게 구현을 기부해 달라고 요청했지만, 이러한 회담은 코드 이전으로 이어지지 않았습니다. 4.3BSD-Reno는 Mach.[2] mmap() as mmap()의 가상 메모리 시스템을 기반으로 하는 구현과 함께 대신 출하되었으며, 사용할 수 있는 많은 파라미터를 가지고 있어 유연한 메모리 매핑을 제공한다. 다음은 2^20의 시작부터 페이지를 가져오는 예제입니다.

페이지의 기본 크기는 4096 바이트이므로 4096 바이트 메모리가있는 페이지를 매핑합니다. mmap()으로 매핑된 메모리는 동일한 속성으로 포크(2)에 걸쳐 유지됩니다. 어쨌든 mmap()에서 반환되는 값이 == MAP_FAILED인지 적어도 확인해야 합니다. 자세한 내용은 mmap의 열기 그룹 페이지를 참조하십시오.