Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何将文件映射到OSX中的虚拟内存管理器?_Objective C_Macos_File_Virtual Machine - Fatal编程技术网

Objective c 如何将文件映射到OSX中的虚拟内存管理器?

Objective 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

我正在尝试将一个文件映射到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
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()