| @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"); | |
| } | |