On Wednesday, 29 May 2013 at 04:48:07 UTC, Russel Winder wrote:
On Tue, 2013-05-28 at 13:46 -0400, Jonathan M Davis wrote:
[…]
Do you mean something like std.mmfile.MmFile which operates on
a file as an array in memory using mmap, or do you mean
operating on memory that has no connection to a file at all
(in which case, I'm not sure why you'd want to use File)? If
the former, well use std.file.MmFile. If the latter, I expect
that you're out of luck. Unfortunately, std.stdio.File is
currently just a wrapper around FILE and is thus limited by
what you can do with FILE - that and I don't think that the
File API took into consideration the possibility of operating
on anything other than an actual file (and I honestly don't
know what you'd be trying to do with it where it would make
any sense for to operate on anything other than an actual
file).
Looks like I am out of luck then. :-(
The context is writing a small program that can be a filter or
operate
on files: actually it is the wc program. So it needs to work
with opened
files and stdin. That is fine (sort of). The issue comes when
writing
unit tests for the code: unit tests should not touch the file
system, so
I need a memory buffer backed std.stdio.File for the tests. A
mock file
in a sense.As noted earlier Go, Python, all JVM languages have
such
things, and it really needs to be part of D. If there really is
nothing
like this, I should add a JIRA issue and see if I can create a
pull
request later in the summer.
It could be implemented in phobos fairly easily - on posix there
is "fmemopen" or "open_memstream" to get a FILE* from a memory
buffer. On windows there is "CreateFileMapping" in conjunction
with "MapViewOfFile". The semantics are slightly different but
they both allow the functionality you are after.