[技術] 使用Linux的mmap心得

Written on 11:40 上午 by Yu Lai

最近的工作有遇到一個用mmap解決的issue,
讓我了解到mmap原來也可以這樣使用.
以下是使用的心得, 寫下來分享一下.

一般我們在Linux中使用mmap不外乎是用來做IPC的實做,
或是配合driver的file node來操控外部的device,
或者是特殊的需求-加速存取or動態載入.

但我這次遇到的問題居然是空間的需求. 在採用Linux來實做
Embedded System時, 往往會使用Ramdisk或ramfs等技術
來implement出file system來. 而這類的file system有個特點-
它佔memory. 所以在存取較大的檔案時, e.g. image raw file.
若採用傳統malloc出空間再讀進此空間進行操作時, e.g. MD5
checksum, 勢必會遇到記憶不夠的情況.
(PS. 還意外知道原來Linux有oom-killer這東東 XD)

此時我採用了mmap來將原本就在memory裡的file另外對映到
其他記憶體空間中, 把這個當成pointer來操作, 而不用額外花費
真實的memory空間. 以下是相關的source code:

int fd;
struct stat fstat;

fd = open(TMPMD5, O_RDONLY);
stat(TMPMD5, &fstat);
image = mmap(NULL, fstat.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
if(image == MAP_FAILED) {
printf("Error.\n");
close(fd);
return -1;
}

If you enjoyed this post Subscribe to our feed

2 Comments

  1. Justin |

    blog 變好看了
    要同意轉載阿 :P

     
  2. Yu Lai |

    只要你願意一篇付10塊美金我就同意轉:>

     

張貼留言