memmapfile
파일에 대한 메모리 맵(Memory Map) 생성
설명
는 하나 이상의 이름-값 쌍의 인수를 사용하여 m
= memmapfile(filename
,Name,Value
)m
의 속성을 지정합니다. 예를 들어, 파일의 데이터 형식을 지정할 수 있습니다.
예제
uint8
형 데이터의 전체 파일 매핑
명령 프롬프트에서, 10개의 uint8
형 값이 포함된 샘플 파일 records.dat
를 현재 폴더에 만듭니다.
myData = uint8(1:10)'; fileID = fopen('records.dat','w'); fwrite(fileID, myData,'uint8'); fclose(fileID);
records.dat
의 맵을 만듭니다. memmapfile
을 사용할 때 디폴트 데이터 형식은 uint8
형이므로, 이 경우에는 파일 이름이 유일하게 필요한 입력 인수입니다.
m = memmapfile('records.dat')
m = Filename: 'd:\matlab\records.dat' Writable: false Offset: 0 Format: 'uint8' Repeat: Inf Data: 10x1 uint8 array
MATLAB은 전체 records.dat
파일을 메모리에 매핑하고 메모리 맵의 모든 속성을 각 디폴트 값으로 설정합니다. 메모리 맵은 변수 m
에 대입됩니다. 이 예제에서 명령은 전체 파일을 일련의 부호 없는 8비트 정수로 매핑하고, 호출자에게 해당 내용에 대한 읽기 전용 액세스를 제공합니다.
m
의 Data
속성에 액세스하여 매핑된 데이터를 확인합니다.
m.Data
ans = 1 2 3 4 5 6 7 8 9 10
배정밀도 데이터의 전체 파일 매핑
배정밀도 데이터의 메모리 맵을 만듭니다. 구문은 다른 데이터형을 지정할 때와 비슷합니다.
명령 프롬프트에서, 10개의 double
형 값이 포함된 샘플 파일 records.dat
를 현재 폴더에 만듭니다.
myData = (1:10)'; fileID = fopen('records.dat','w'); fwrite(fileID,myData,'double'); fclose(fileID);
records.dat
의 메모리 맵을 만들고 출력값의 Format
속성을 'double'
로 설정합니다.
m = memmapfile('records.dat','Format','double') ;
memmapfile m
은 Filename
, Writable
, Offset
, Format
, Repeat
, Data
속성을 포함합니다. 어느 한 속성을 표시하려면 , 예로 Format
의 경우, 명령 창에 m.Format
을 입력하십시오.
m.Format
ans = 'double'
Data
속성에는 records.dat
에 있는 10개의 배정밀도 값이 들어 있습니다.
파일의 일부 매핑 및 변경
int32
형 데이터로 구성된 큰 배열의 메모리 맵을 만듭니다. 쓰기 액세스와 디폴트가 아닌 Format
값과 Offset
값을 지정합니다.
명령 프롬프트에서, 10,000개의 int32
형 값이 포함된 샘플 파일 records.dat
를 현재 폴더에 만듭니다.
myData = int32([1:10000]); fileID = fopen('records.dat','w'); fwrite(fileID,myData,'int32'); fclose(fileID);
records.dat
의 메모리 맵을 만들고 출력값의 Format
속성을 int32
로 설정합니다. 또한 파일의 처음 9000바이트를 무시하도록 Offset
속성을 설정하고, Writable
속성을 설정하여 쓰기 액세스를 허용합니다.
m = memmapfile('records.dat',... 'Offset',9000,... 'Format','int32',... 'Writable',true);
Offset
값 9000
은 records.dat
의 처음 9000바이트가 매핑되지 않음을 나타냅니다.
메모리 맵의 이름을 입력하여 모든 속성의 현재 설정을 확인합니다.
m
m = Filename: 'd:\matlab\records.dat' Writable: true Offset: 9000 Format: 'int32' Repeat: Inf Data: 7750x1 int32 array
Format
속성은 메모리 맵을 통해 수행되는 모든 읽기 작업이나 쓰기 작업이 파일 내용을 일련의 부호 있는 32비트 정수로 읽거나 쓴다는 것을 나타냅니다. 파일의 처음 2,250개 값을 나타내는 records.dat
의 처음 9000바이트가 매핑되지 않았으므로 Data
속성에는 7,750개의 요소만 들어 있습니다.
m
의 Data
속성에 액세스하여 매핑된 데이터의 처음 5개 요소를 확인합니다.
m.Data(1:5)
ans = 2251 2252 2253 2254 2255
파일 영역을 특정 배열 형태에 매핑
100개의 배정밀도 값이 포함된 파일의 영역에 대한 메모리 맵을 만듭니다.
명령 프롬프트에서, 100개의 배정밀도 값이 포함된 샘플 파일 mybinary.bin
을 현재 폴더에 만듭니다.
rng('default') randData = rand([100,1]); fileID = fopen('mybinary.bin','w'); fwrite(fileID,randData,'double'); fclose(fileID);
mybinary.bin
의 처음 75개 값을 필드 이름 x
를 사용하여 메모리 맵의 구조체에서 참조할 수 있는 배정밀도 값으로 구성된 5×5×3 배열에 매핑합니다. Format
이름-값 쌍의 인수를 사용하여 이러한 파라미터를 지정합니다.
m = memmapfile('mybinary.bin',... 'Format',{'double',[5 5 3],'x'})
m = Filename: 'd:\matlab\mybinary.bin' Writable: false Offset: 0 Format: {'double' [5 5 3] 'x'} Repeat: Inf Data: 1x1 struct array with fields: x
Data
속성은 필드 x
의 매핑된 값을 포함하는 구조체형 배열입니다.
매핑된 데이터를 변수 A
에 대입합니다. Data
속성은 구조체형 배열이므로, 데이터에 액세스하려면 필드 x
의 요소를 참조해야 합니다.
A = m.Data.x;
A
에 대한 정보를 확인합니다.
whos A
Name Size Bytes Class Attributes A 5x5x3 600 double
파일의 세그먼트를 여러 배열에 매핑
다양한 배열 형태와 데이터형을 가진 파일의 세그먼트를 메모리에 매핑합니다.
명령 프롬프트에서, 샘플 파일 mybinary.bin
을 현재 폴더에 만듭니다. 샘플 압력, 온도 및 볼륨 값을 나타내는 uint16
형 데이터와 배정밀도 데이터를 파일에 씁니다. 이 경우 각 uint16
형 배열은 50×1이고 배정밀도 배열은 5×10입니다. k
는 샘플 스케일링 인자입니다.
rng('default') k = 8.21; pres1 = randi([1,300],[50,1],'uint16'); temp1 = randi([1,300],[50,1],'uint16'); vol1 = double(reshape(k*temp1./pres1,5,10)); pres2 = randi([5,500],[50,1],'uint16'); temp2 = randi([5,500],[50,1],'uint16'); vol2 = double(reshape(k*temp2./pres2,5,10)); fileID = fopen('mybinary.bin','w'); fwrite(fileID,pres1,'uint16'); fwrite(fileID,temp1,'uint16'); fwrite(fileID,vol1,'double'); fwrite(fileID,pres2,'uint16'); fwrite(fileID,temp2,'uint16'); fwrite(fileID,vol2,'double'); fclose(fileID);
고유한 이름으로 액세스할 수 있는 배열에 파일을 매핑합니다. uint16
형 값으로 구성된 50×1 배열이 포함된 필드 pressure
를 정의한 다음, 50×1 uint16
형 값이 포함된 필드 temperature
를 정의합니다. 배정밀도 값으로 구성된 5×10 배열이 포함된 필드 volume
을 정의합니다. 셀형 배열을 사용하여 매핑된 영역의 형식을 정의하고 패턴을 두 번 반복합니다.
m = memmapfile('mybinary.bin',... 'Format',{'uint16',[50 1],'pressure';... 'uint16',[50,1],'temperature';... 'double',[5,10],'volume'},'Repeat',2)
m = Filename: 'd:\matlab\mybinary.bin' Writable: false Offset: 0 Format: {'uint16' [50 1] 'pressure' 'uint16' [50 1] 'temperature' 'double' [5 10] 'volume'} Repeat: 2 Data: 2x1 struct array with fields: pressure temperature volume
Format
이 두 번 적용되므로, 메모리 맵 m
의 Data
속성은 2×1 구조체형 배열입니다.
Data
속성을 변수 A
에 복사합니다. 그런 다음 double
형 데이터의 마지막 블록을 확인합니다. 이 블록에는 필드 이름 volume
을 사용하여 액세스할 수 있습니다.
A = m.Data; myVolume = A(2).volume
myVolume = 2 13 32 5 5 16 4 22 3 8 2 9 53 38 13 19 23 85 2 120 29 10 6 1 2 5 6 58 20 11 7 15 4 1 5 18 1 4 14 8 9 8 4 2 0 9 8 6 3 3
입력 인수
filename
— 매핑할 파일의 이름
문자형 벡터 | string형 스칼라
매핑할 파일의 이름(파일 확장자 포함)으로, 문자형 벡터 또는 string형 스칼라로 지정됩니다. filename
인수는 와일드카드 문자(예: *
또는 ?
)를 포함할 수 없습니다.
예: 'myFile.dat'
데이터형: char
| string
이름-값 인수
선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN
으로 지정합니다. 여기서 Name
은 인수 이름이고 Value
는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.
R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name
을 따옴표로 묶으십시오.
예: m = memmapfile('myFile.dat','Format','int32','Offset',255)
는 파일 myFile.dat
의 int32
형 데이터를 256번째 바이트부터 시작하여 메모리에 매핑합니다.
Writable
— 쓰기 권한
false
(디폴트 값) | true
쓰기 권한으로, true
또는 false
로 지정됩니다. false
를 지정할 경우 매핑된 영역은 읽기 전용입니다. true
를 지정할 경우 매핑된 영역은 읽기 권한과 쓰기 권한을 모두 갖습니다.
예: 'Writable',true
데이터형: logical
Offset
— 파일의 시작 위치부터의 거리
0 (디폴트 값) | 음이 아닌 정수
파일의 시작 위치부터 매핑된 영역의 시작 위치까지의 거리로, 음이 아닌 정수로 지정됩니다. 이 값은 0부터 시작합니다. 즉, 값 0은 파일의 시작 위치를 나타냅니다.
예: 'Offset',1024
데이터형: double
Format
— 매핑된 영역의 형식
'uint8'
(디폴트 값) | 문자형 벡터 | string형 스칼라 | n
×3 셀형 배열
매핑된 영역의 형식으로, 문자형 벡터, string형 스칼라 또는 n
×3 셀형 배열로 지정됩니다.
매핑하려는 영역에 한 가지 유형의 데이터만 포함되어 있으면 Format 값을 그 유형을 식별하는 문자형 벡터 또는 string형 스칼라로 지정합니다. 예를 들어, 데이터에 부호 있는 16비트 정수만 포함되어 있으면 'int16'
을 지정합니다. Format
값을 지정할 때 다음 데이터형 중 하나를 사용할 수 있습니다.
'int8'
'int16'
'int32'
'int64'
'uint8'
'uint16'
'uint32'
'uint64'
'single'
'double'
매핑하려는 영역이, 매핑되는 파일의 데이터에 대한 배열 형태 및 배열을 참조하기 위한 필드 이름을 지정할 것을 필요로 하는 경우 Format
값을 1×3 셀형 배열로 지정하십시오.
문자형 벡터 또는 string형 스칼라로 지정된 첫 번째 셀 값은 매핑된 영역에 적용할 데이터형을 할당합니다.
1×n 배열로 지정된 두 번째 셀 값은 매핑된 영역에 적용할 배열 차원을 할당합니다.
문자형 벡터 또는 string형 스칼라로 지정된 세 번째 셀 값은 메모리 맵으로 구성된
Data
구조체형 배열에서 사용할 필드 이름을 할당합니다. 예:{'uint64',[30 4 10],'x'}
매핑하려는 영역이 다양한 데이터형이나 배열 형태를 가진 세그먼트로 구성된 경우 n×3 셀형 배열을 사용하여 각 세그먼트의 형식을 지정할 수 있습니다. 예를 들면 {'uint64',[30 4 10],'x'; 'uint32',[30 4 6],'y'}
와 같습니다.
데이터형: char
| string
| cell
Repeat
— Format
파라미터를 적용할 횟수
Inf
(디폴트 값) | 양의 정수
매핑된 영역에 Format
파라미터를 적용할 횟수로, Inf
또는 양의 정수로 지정됩니다. Inf
를 지정할 경우 memmapfile
은 파일의 끝까지 Format
파라미터를 적용합니다.
예: 'Repeat',2000
데이터형: double
출력 인수
m
— 메모리 맵
memmapfile
객체
메모리 맵으로, 다음 속성을 가진 memmapfile
객체로 반환됩니다.
속성 | 설명 |
---|---|
| 매핑된 파일의 경로와 이름 |
| 매핑된 영역에 허용되는 액세스 유형 |
| 파일의 시작 위치부터 매핑된 영역의 시작 위치까지의 바이트 수 |
| 매핑된 영역에 대한 내용(데이터형, 배열 크기, 데이터에 액세스하는 데 사용되는 필드 이름 포함)의 형식 |
| Format 속성으로 지정된 패턴을 파일의 매핑된 영역에 적용할 횟수 |
| 파일에서 메모리 매핑된 데이터. Data 는 Format 속성에 지정된 필드 이름으로 구성된 숫자형 배열이나 구조체형 배열일 수 있음 |
Data
를 제외한 모든 속성의 값은 memmapfile
을 호출할 때 이름-값 쌍의 인수를 사용하여 설정됩니다.
구조체형 배열의 필드에 액세스하는 것과 유사하게, 점 표기법을 사용하여 m
의 속성에 액세스합니다. 예를 들어, Data
속성의 메모리 매핑된 데이터에 액세스하려면 다음 중 하나를 수행하십시오.
Data
가 숫자형 배열이면m.Data
를 호출하십시오.Data
가 스칼라(1×1) 구조체형 배열이면m.Data.
을 호출하십시오. 여기서fieldname
fieldname
은 필드 이름입니다.Data
가 비 스칼라 구조체형 배열이면m.Data(
을 호출합니다. 여기서index
).fieldname
index
는 구조체형 배열에 있는 요소의 인덱스이고,fieldname
은 필드 이름입니다. 예를 들어,Data
의 첫 번째 요소의temperature
필드에 있는 파일 데이터에 액세스하려면m.Data(1).temperature
를 호출하십시오.
메모리 맵 m
을 만든 후에 Data
를 제외한 모든 속성값을 변경할 수 있습니다. 새 값을 대입하려면 점 표기법을 사용하십시오. 예를 들어, m
에 대해 새 Offset
값을 설정하려면 다음을 입력하십시오.
m.Offset = 2048;
팁
기존 파일만 매핑할 수 있습니다. 한 작업에서 새 파일을 만든 다음 이 파일을 메모리에 매핑할 수 없습니다. 파일을 만들려면 파일을 메모리에 매핑하기 전에 MATLAB 파일 I/O 함수를 사용하여 만드십시오.
memmapfile
이 파일을 찾은 후에 MATLAB은 파일의 절대 경로 이름을 내부적으로 저장하고 이 시점 이후로는 이 저장된 경로를 사용하여 파일을 찾습니다. 따라서, 현재 작업 디렉터리 외부에 있는 다른 디렉터리에서 작업하면서 매핑된 파일에 대한 액세스를 유지할 수 있습니다.memmapfile
은 매핑된 파일을 확장하거나 매핑된 파일에 추가하지 않습니다. 대신fopen
,fwrite
와 같은 표준 파일 I/O 함수를 사용하십시오.
알고리즘
memmapfile
객체를 생성할 때는 파일을 MATLAB 주소 공간에 실제로 매핑하는 동작이 발생하지 않습니다. 이 객체의 Data
속성을 처음으로 참조하거나 수정할 때, 매핑된 객체에 현재 저장되어 있는 정보를 기반으로 하여 메모리 맵이 생성됩니다.
버전 내역
R2006a 이전에 개발됨
참고 항목
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)