我正在嘗試將文件映射到OS X的虛擬內存管理器。我如何使用Objective C在Mac OS X上執行此操作?如何將文件映射到OSX中的虛擬內存管理器?
4
A
回答
1
使用mmap。例如
FILE* f = fopen(...);
// Map the file into memory.
// Need the file size.
fseek(f, 0, SEEK_END); // seek to end of file
off_t fileSize = ftello(f); // get current file pointer
fseek(f, 0, SEEK_SET); // seek back to beginning of file
mappedSize = fileSize;
mappedAddress = mmap(0, _mappedSize, PROT_READ, MAP_PRIVATE, f->_file, 0);
... use mappedAddress as a pointer to your data
// Finally free up
munmap(_mappedAddress, _mappedSize);
fclose(f);
+1
使用'fileno()'而不是訪問'FILE'結構的實現細節。對於這個問題,最好使用'open()','lseek()'和'close()'。 –
1
當然使用mmap()
的作品。考慮到您使用Cocoa,另一種選擇是使用NSData
或NSMutableData
。您可以在選項中使用-initWithContentsOfURL:options:error:
和NSDataReadingMappedIfSafe
或NSDataReadingMappedAlways
創建數據對象。有兩個不同的選項,因爲映射文件不一定安全。如果文件位於可能自發消失的文件系統上(網絡文件系統,可移動驅動器),則將其映射會導致應用程序崩潰。如果這種情況不太可能發生,前一種選擇只能進行映射。否則,它會將數據讀入內存。後面的選項總是會映射出來,留給你來應付崩潰的可能性。
相關問題
- 1. vxWorks 6.8將物理映射到虛擬內存
- 2. 使用內存映射文件實現虛擬內存
- 3. 內存映射庫的文件名osx
- 4. 如何將虛擬主機映射到docker中的容器?
- 5. 如何將文件的內容複製到虛擬內存中?
- 6. 在IIS6中將域別名映射到虛擬文件夾
- 7. 如何將虛擬目錄映射到VS中的網站?
- 8. 將虛擬目錄映射到Azure AppService
- 9. 在模擬中,打印虛擬物理內存映射的命令是什麼?
- 10. 內核虛擬地址空間中的高內存映射
- 11. 虛擬內存到物理內存
- 12. 如何在OSX上創建沒有支持文件的內存映射文件?
- 13. 如何將文件從虛擬TreeView拖動到Windows資源管理器
- 14. 虛擬文件系統映射到本地文件
- 15. 將虛擬地址映射到特定物理地址
- 16. 將物理地址映射到虛擬地址linux
- 17. 如何將物理地址映射到不同大小的虛擬地址?
- 18. 軌如何將虛擬視圖映射到一個模型
- 19. 如何將oracle sga內存映射爲solaris中的物理文件?
- 20. 內存映射文件C++
- 21. Windows內存映射文件
- 22. 內存映射文件.NET
- 23. 如何理解虛擬內存?
- 24. 將可執行文件中的變量映射到內存段
- 25. 如何管理vim映射
- 26. 追加到內存映射文件
- 27. 如何將結構導出到文件,然後映射文件的內存?
- 28. 嘗試在模擬的操作系統內存管理器中顯示分配內存的「映射」
- 29. Caspol,虛擬機,映射驅動器,VS2010
- 30. Windows任務管理器中的我的MMF(內存映射文件)內存在哪裏?
我編輯了你的問題的'壞'部分,我們仍然錯過了你想要做什麼的語言。 –
我在對象C和C++中編程。 – user3275597
您可以將'C'與'Objective-C'一起使用。您可以使用[mmap] https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man2/mmap.2.html –