| @system unittest |
| { |
| import std.mmfile; |
| |
| import std.file; |
| std.file.write(deleteme, "hello"); // deleteme is a temporary filename |
| scope(exit) remove(deleteme); |
| |
| // Use a scope class so the file will be closed at the end of this function |
| scope mmfile = new MmFile(deleteme); |
| |
| assert(mmfile.length == "hello".length); |
| |
| // Access file contents with the slice operator |
| // This is typed as `void[]`, so cast to `char[]` or `ubyte[]` to use it |
| const data = cast(const(char)[]) mmfile[]; |
| |
| // At this point, the file content may not have been read yet. |
| // In that case, the following memory access will intentionally |
| // trigger a page fault, causing the kernel to load the file contents |
| assert(data[0 .. 5] == "hello"); |
| } |
| |
| @system unittest |
| { |
| import std.mmfile; |
| |
| import std.file; |
| scope(exit) remove(deleteme); |
| |
| scope mmfile = new MmFile(deleteme, MmFile.Mode.readWriteNew, 5, null); |
| assert(mmfile.length == 5); |
| |
| auto data = cast(ubyte[]) mmfile[]; |
| |
| // This write to memory will be reflected in the file contents |
| data[] = '\n'; |
| |
| mmfile.flush(); |
| |
| assert(std.file.read(deleteme) == "\n\n\n\n\n"); |
| } |
| |