unsafe void CreateStreamPosix(int fd, long offset, long size, MemoryMappedFileAccess access) { int offset_diff; mmap_size = (ulong)size; MemoryMappedFile.MapPosix(fd, offset, ref size, access, out mmap_addr, out offset_diff); FileAccess faccess; switch (access) { case MemoryMappedFileAccess.ReadWrite: faccess = FileAccess.ReadWrite; break; case MemoryMappedFileAccess.Read: faccess = FileAccess.Read; break; case MemoryMappedFileAccess.Write: faccess = FileAccess.Write; break; default: throw new NotImplementedException("access mode " + access + " not supported."); } Initialize((byte *)mmap_addr + offset_diff, size, size, faccess); }
unsafe void CreateStreamPosix(FileStream file, long offset, long size, MemoryMappedFileAccess access) { long fsize = file.Length; if (size == 0 || size > fsize) { size = fsize; } int offset_diff; MemoryMappedFile.MapPosix(file, offset, size, access, out mmap_addr, out offset_diff, out mmap_size); FileAccess faccess; switch (access) { case MemoryMappedFileAccess.ReadWrite: faccess = FileAccess.ReadWrite; break; case MemoryMappedFileAccess.Read: faccess = FileAccess.Read; break; case MemoryMappedFileAccess.Write: faccess = FileAccess.Write; break; default: throw new NotImplementedException("access mode " + access + " not supported."); } Initialize((byte *)mmap_addr + offset_diff, size, size, faccess); }
unsafe void CreatePosix(long offset, long size, MemoryMappedFileAccess access) { int offset_diff; MemoryMappedFile.MapPosix(file_handle, offset, ref size, access, out mmap_addr, out offset_diff); handle = new SafeMemoryMappedViewHandle((IntPtr)((long)mmap_addr + offset_diff), size); Initialize(handle, 0, size, ToFileAccess(access)); }
unsafe void CreatePosix(FileStream file, long offset, long size, MemoryMappedFileAccess access) { long fsize = file.Length; if (size == 0 || size > fsize) { size = fsize; } int offset_diff; MemoryMappedFile.MapPosix(file, offset, size, access, out mmap_addr, out offset_diff, out mmap_size); handle = new SafeMemoryMappedViewHandle((IntPtr)((long)mmap_addr + offset_diff), size); }