Objective c 如何将文件映射到OSX中的虚拟内存管理器?
我正在尝试将一个文件映射到OSX的虚拟内存管理器中。如何使用Objective C在Mac OS X上执行此操作?使用mmap。e、 gObjective c 如何将文件映射到OSX中的虚拟内存管理器?,objective-c,macos,file,virtual-machine,Objective C,Macos,File,Virtual Machine,我正在尝试将一个文件映射到OSX的虚拟内存管理器中。如何使用Objective C在Mac OS X上执行此操作?使用mmap。e、 g 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 fse
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);
当然,使用
mmap()。考虑到您正在使用Cocoa,另一个选项是使用NSData
或NSMutableData
。您可以使用选项中的-initWithContentsOfURL:options:error:
和NSDataReadingMappedIfSafe
或nsdatareadingmappedaways
创建数据对象。有两种不同的选择,因为映射文件不一定是安全的。如果文件位于可能自动消失的文件系统(网络文件系统、可移动驱动器)上,则将其映射会导致应用程序崩溃。前一个选项仅适用于不太可能发生的情况。否则,它会将数据读入内存。后一个选项总是映射,留给你来处理崩溃的可能性。< /P>我编辑了你的问题的“坏”部分,我们仍然缺少你想做的语言。我在对象C和C++中编程。你可以使用<代码> C <代码>和<代码> ObjultC < /代码>。您可以使用[mmap]我正在设计一个DBMS,我更愿意直接打开并将我的文件添加到VM中,以便处理它们的内容。如果苹果公司已经充分记录了这一点,那么请直接告诉我。我用简单的勺子喂食效果最好,所以最好用例子。我查过MMAP-谢谢!使用fileno()
而不是访问文件
结构的实现细节。因此,最好使用open()
、lseek()
和close()
。