使用以下方法映射大文件失败。
NSData *mappedData = [NSData dataWithContentsOfFile:self.videoPath options:NSDataReadingMappedAlways error:&error];
或地图:
int fd = open([path fileSystemRepresentation], O_RDONLY);
struct stat statbuf;
if (fstat(fd, &statbuf) == -1) {
close(fd);
return nil;
}
void *mappedFile;
mappedFile = mmap(0, statbuf.st_size, PROT_READ, MAP_FILE|MAP_SHARED, fd, 0);
close(fd);
if (mappedFile == MAP_FAILED) {
NSLog(@"Map failed, errno=%d, %s", errno, strerror(errno));
return nil;
}
// Create the NSData
NSData *mappedData = [NSData dataWithBytesNoCopy:mappedFile length:statbuf.st_size freeWhenDone:NO];`
内存映射失败,mappedData 将整个文件加载到 RAM。
为什么失败?还有其他建议吗?