2014-04-01 29 views
0

無論出於何種原因,我無法在C中使用mmap打開任何大小的文件。我可能會丟失明顯的東西,因此您的建議將不勝感激。我搜索了類似的回覆,但沒有找到任何幫助。這是我的代碼 - 是的,它非常簡單。mmap無法分配內存 - 絕對不會出現內存不足

#include <stdio.h> 
#include <stdlib.h> 
#include <sys/mman.h> 
#include <sys/stat.h> 
#include <fcntl.h> 

int main(int argc, const char * argv[]) 
{ 
void * data; 
int fd; 
struct stat sb; 
fd = open("small.txt", O_RDONLY); 

data = mmap(0, sb.st_size, PROT_READ, MAP_SHARED, fd, 0); 
if (data == MAP_FAILED) perror("mmap"); 

return 0; 
} 

small.txt是一個非常小的文本文件,它的大小爲4.0 K.正在運行的特定機器具有大量的RAM(> 500G)。內存不是這裏的問題。我意識到這是我正在做的事情,如果您能爲我指出這一點,我將非常感激。

我得到的錯誤是「MMAP:無法分配內存」

+4

你傳入'未初始化的sb.st_size'長度參數。它可以是一個很大的數字。 – zch

+0

就是這樣。謝謝! –

回答