2013-02-17 31 views
0

我想訪問一個文件,就像一個數組,而不是用fopen()和龜etc()/ fputc()函數等C二元文件處理爲數組

我在尋找一種方法這會給我一個指向文件的指針,然後我可以把它視爲一個大字符串(EOF終止或給定的長度,無論),我想整個文件在內存中,並需要快速訪問特定的部分。

這可能嗎?如果是的話,你能推薦一種方法嗎?我也很好奇,爲什麼這不是訪問c文件的默認方式,是因爲文件通常不會存儲在連續的內存中?

感謝您的幫助。

+0

那麼,在許多環境中,您可以使用「內存映射」模式訪問文件,使您可以使用任何陣列或結構視圖覆蓋它。 – 2013-02-17 19:49:03

回答

3

您正在尋找名爲內存映射文件的內容。例如,如果您使用的是Unix,請查找mmap

fd = open(...);  
p = mmap(NULL, buf.st_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); 

/* Use `p` like a pointer to some memory and fstat to find size. */ 

如果你在Win32上找CreateFileMappingMapViewOfFile

+0

謝謝,我在Linux btw會考慮它! – sfi 2013-02-17 19:51:53

+0

@sfi我爲'mmap'添加了一些細節。 – cnicutar 2013-02-17 19:52:23

+0

@WhozCraig新增鏈接。 – cnicutar 2013-02-17 19:53:30