[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Chicken-users] using mmap files as strings?
From: |
Felix |
Subject: |
Re: [Chicken-users] using mmap files as strings? |
Date: |
Fri, 22 Oct 2010 06:20:01 -0400 (EDT) |
From: Alan Post <address@hidden>
Subject: [Chicken-users] using mmap files as strings?
Date: Thu, 21 Oct 2010 15:01:10 -0600
> I have the following file:
>
> <++> mmap.scm
> (use posix)
> (use lolevel)
>
> (let* ((fd (file-open "mmap.scm" (+ open/rdonly open/nonblock)))
> (size (file-size fd))
> (mmap (map-file-to-memory #f size prot/read (+ map/file map/shared)
> fd))
> (buf (memory-mapped-file-pointer mmap)))
> (write fd)
> (newline)
> (write size)
> (newline)
> (write mmap)
> (newline)
> (write buf)
> (newline)
> (write (pointer-s8-ref buf))
> (newline)
> (write (integer->char (pointer-s8-ref buf)))
> (newline))
> <-->
>
> Which opens itself as an mmap and reads the first byte. The output
> is:
>
> <++> csc -o mmap mmap.scm && ./mmap
> 3
> 458
> #<mmap>
> #<pointer 0x8818c000>
> 40
> #\(
> <-->
>
> So far so good, that is what I would expect. I'd like to work with
> an mmap buffer like a string. Is it possible to create an object
> that will treat the mmap area as a string that I can run regular
> string operations on without copying the mmap buffer?
I can't think of a way in the moment. Strings require a header-word,
and the data pointed to by a pointer doesn't have that header, so it
isn't possible to "sneak in" a pointer as a replacement of a string.
> I'm
> specifically interested in running regular expressions across the
> mmap space.
irregex provides a "chunk" based API, perhaps it is possible to
define chunks over the data represented by the mmap pointer.
Alex or Peter might be able to tell more about this.
cheers,
felix