[Numpy-discussion] memmap from fd?

Robert Kern robert.kern at gmail.com
Fri Jan 9 16:10:04 EST 2009


On Fri, Jan 9, 2009 at 08:08, Neal Becker <ndbecker2 at gmail.com> wrote:
> Robert Kern wrote:
>
>> On Fri, Jan 9, 2009 at 06:05, Neal Becker <ndbecker2 at gmail.com> wrote:
>>> I'm working on interfacing to a custom FPGA board.  The kernel driver
>>> exposes the FPGA memory via mmap.
>>>
>>> It might be nice to use numpy memmap to read/write data.  One issue is
>>> that I think I will need to create the memmap array from a fd, not a file
>>> name.  The reason is I wrote the driver to only allow 1 exclusive open,
>>> and I already have it open for other reasons.  Any chance to create a
>>> memmap array from a fd?
>>
>> Use os.fdopen(fd) to create a file object which can be passed to the
>> memmap constructor.
>>
>
> Looks like this is not going to work without some change to memmap.  The problem is, I need read/write access.  The only choice in memmap is 'w+'.

'r+' is for reading and writing.

> But this does:
>        if (mode == 'w+') and shape is None:
>            raise ValueError, "shape must be given"
>
>        fid.seek(0,2)
>
> My device has hijacked 'read' to mean something entirely different than you might expect.  The seek call invokes 'read'.
>
> It looks like the purpose of this code is to find the size of the mappable area.  The best solution I think is just throw it away.

We can't. We need it.

> Consistent with mmap semantics, attempting access outside the mappable area should cause and error - but I don't think there is any reliable way to know the length of the mappable area apriori.

For regular files, that seems to me to be fairly reliable. Why isn't it?

-- 
Robert Kern

"I have come to believe that the whole world is an enigma, a harmless
enigma that is made terrible by our own mad attempt to interpret it as
though it had an underlying truth."
  -- Umberto Eco



More information about the NumPy-Discussion mailing list