我正在尝试将文件映射到OS X的虚拟内存管理器中。如何使用Objective C在Mac OS X上执行此操作?
答案 0 :(得分: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 :(得分:1)
当然,使用mmap()
可以正常工作。鉴于您正在使用Cocoa,另一个选择是使用NSData
或NSMutableData
。您可以使用选项中的-initWithContentsOfURL:options:error:
或NSDataReadingMappedIfSafe
NSDataReadingMappedAlways
创建数据对象。有两种不同的选项,因为映射文件不一定安全。如果文件位于可能自动消失的文件系统上(网络文件系统,可移动驱动器),则将其映射会打开您的应用程序以进行崩溃。前一个选项仅在不太可能发生的情况下进行映射。否则,它将数据读入内存。后一个选项总是映射,留给你应对崩溃的可能性。