2000-06-17 22:39:05 +00:00
|
|
|
\section{\module{mmap} ---
|
|
|
|
Memory-mapped file support}
|
|
|
|
|
|
|
|
\declaremodule{builtin}{mmap}
|
|
|
|
\modulesynopsis{Interface to memory-mapped files for Unix and Windows.}
|
|
|
|
|
|
|
|
Memory-mapped file objects behave like both mutable strings and like
|
|
|
|
file objects. You can use mmap objects in most places where strings
|
|
|
|
are expected; for example, you can use the \module{re} module to
|
|
|
|
search through a memory-mapped file. Since they're mutable, you can
|
2000-09-05 13:50:21 +00:00
|
|
|
change a single character by doing \code{obj[\var{index}] = 'a'}, or
|
2000-06-17 22:39:05 +00:00
|
|
|
change a substring by assigning to a slice:
|
2000-09-05 13:50:21 +00:00
|
|
|
\code{obj[\var{i1}:\var{i2}] = '...'}. You can also read and write
|
2000-06-17 22:39:05 +00:00
|
|
|
data starting at the current file position, and \method{seek()}
|
|
|
|
through the file to different positions.
|
|
|
|
|
|
|
|
A memory-mapped file is created by the following function, which is
|
|
|
|
different on Unix and on Windows.
|
|
|
|
|
2000-09-05 13:50:21 +00:00
|
|
|
\begin{funcdesc}{mmap}{fileno, length\optional{, tagname}}
|
|
|
|
\strong{(Windows version)} Maps \var{length} bytes from the file
|
|
|
|
specified by the file handle \var{fileno}, and returns a mmap object.
|
2001-01-11 22:49:49 +00:00
|
|
|
If \var{length} is \code{0}, the maximum length of the map will be the
|
|
|
|
current size of the file when \function{mmap()} is called.
|
2000-09-05 13:50:21 +00:00
|
|
|
If you wish to map an existing Python file object, use its
|
|
|
|
\method{fileno()} method to obtain the correct value for the
|
2001-01-11 22:49:49 +00:00
|
|
|
\var{fileno} parameter. The file must be opened for update.
|
2000-06-18 04:17:38 +00:00
|
|
|
|
2001-01-11 22:49:49 +00:00
|
|
|
\var{tagname}, if specified and not \code{None}, is a string giving a
|
|
|
|
tag name for the mapping. Windows allows you to have many different
|
|
|
|
mappings against the same file. If you specify the name of an
|
|
|
|
existing tag, that tag is opened, otherwise a new tag of this name is
|
|
|
|
created. If this parameter is omitted or \code{None}, the mapping is
|
|
|
|
created without a name. Avoiding the use of the tag parameter will
|
|
|
|
assist in keeping your code portable between \UNIX{} and Windows.
|
2000-06-17 22:39:05 +00:00
|
|
|
\end{funcdesc}
|
|
|
|
|
2000-09-05 13:50:21 +00:00
|
|
|
\begin{funcdesc}{mmap}{fileno, size\optional{, flags, prot}}
|
2001-01-11 22:49:49 +00:00
|
|
|
\strong{(\UNIX{} version)} Maps \var{length} bytes from the file
|
2000-09-05 13:50:21 +00:00
|
|
|
specified by the file handle \var{fileno}, and returns a mmap object.
|
|
|
|
If you wish to map an existing Python file object, use its
|
|
|
|
\method{fileno()} method to obtain the correct value for the
|
2001-01-11 22:49:49 +00:00
|
|
|
\var{fileno} parameter. The file must be opened for update.
|
2000-06-17 22:39:05 +00:00
|
|
|
|
|
|
|
\var{flags} specifies the nature of the mapping.
|
2000-09-05 13:50:21 +00:00
|
|
|
\constant{MAP_PRIVATE} creates a private copy-on-write mapping, so
|
2000-06-17 22:39:05 +00:00
|
|
|
changes to the contents of the mmap object will be private to this
|
2000-09-05 13:50:21 +00:00
|
|
|
process, and \constant{MAP_SHARED} creates a mapping that's shared
|
2000-06-17 22:39:05 +00:00
|
|
|
with all other processes mapping the same areas of the file.
|
2000-09-05 13:50:21 +00:00
|
|
|
The default value is \constant{MAP_SHARED}.
|
2000-06-17 22:39:05 +00:00
|
|
|
|
|
|
|
\var{prot}, if specified, gives the desired memory protection; the two
|
2000-09-05 13:50:21 +00:00
|
|
|
most useful values are \constant{PROT_READ} and \constant{PROT_WRITE},
|
|
|
|
to specify that the pages may be read or written.
|
|
|
|
\var{prot} defaults to \constant{PROT_READ | PROT_WRITE}.
|
2000-06-17 22:39:05 +00:00
|
|
|
\end{funcdesc}
|
|
|
|
|
|
|
|
Memory-mapped file objects support the following methods:
|
|
|
|
|
|
|
|
|
|
|
|
\begin{methoddesc}{close}{}
|
|
|
|
Close the file. Subsequent calls to other methods of the object
|
|
|
|
will result in an exception being raised.
|
|
|
|
\end{methoddesc}
|
|
|
|
|
2000-09-05 13:50:21 +00:00
|
|
|
\begin{methoddesc}{find}{string\optional{, start}}
|
|
|
|
Returns the lowest index in the object where the substring
|
|
|
|
\var{string} is found. Returns \code{-1} on failure. \var{start} is
|
|
|
|
the index at which the search begins, and defaults to zero.
|
2000-06-17 22:39:05 +00:00
|
|
|
\end{methoddesc}
|
|
|
|
|
2000-09-05 13:50:21 +00:00
|
|
|
\begin{methoddesc}{flush}{\optional{offset, size}}
|
2000-06-17 22:39:05 +00:00
|
|
|
Flushes changes made to the in-memory copy of a file back to disk.
|
|
|
|
Without use of this call there is no guarantee that changes are
|
2000-06-18 04:17:38 +00:00
|
|
|
written back before the object is destroyed. If \var{offset} and
|
|
|
|
\var{size} are specified, only changes to the given range of bytes
|
|
|
|
will be flushed to disk; otherwise, the whole extent of the mapping is
|
|
|
|
flushed.
|
2000-06-17 22:39:05 +00:00
|
|
|
\end{methoddesc}
|
|
|
|
|
|
|
|
\begin{methoddesc}{move}{\var{dest}, \var{src}, \var{count}}
|
|
|
|
Copy the \var{count} bytes starting at offset \var{src}
|
|
|
|
to the destination index \var{dest}.
|
|
|
|
\end{methoddesc}
|
|
|
|
|
|
|
|
\begin{methoddesc}{read}{\var{num}}
|
2000-06-18 04:17:38 +00:00
|
|
|
Return a string containing up to \var{num} bytes starting from the
|
2000-06-17 22:39:05 +00:00
|
|
|
current file position; the file position is updated to point after the
|
|
|
|
bytes that were returned.
|
|
|
|
\end{methoddesc}
|
|
|
|
|
|
|
|
\begin{methoddesc}{read_byte}{}
|
2000-06-18 04:17:38 +00:00
|
|
|
Returns a string of length 1 containing the character at the current
|
|
|
|
file position, and advances the file position by 1.
|
2000-06-17 22:39:05 +00:00
|
|
|
\end{methoddesc}
|
|
|
|
|
|
|
|
\begin{methoddesc}{readline}{}
|
|
|
|
Returns a single line, starting at the current file position and up to
|
|
|
|
the next newline.
|
|
|
|
\end{methoddesc}
|
|
|
|
|
|
|
|
\begin{methoddesc}{resize}{\var{newsize}}
|
|
|
|
\end{methoddesc}
|
|
|
|
|
2000-09-05 13:50:21 +00:00
|
|
|
\begin{methoddesc}{seek}{pos\optional{, whence}}
|
|
|
|
Set the file's current position.
|
|
|
|
\var{whence} argument is optional and defaults to \code{0} (absolute
|
|
|
|
file positioning); other values are \code{1} (seek relative to the
|
|
|
|
current position) and \code{2} (seek relative to the file's end).
|
2000-06-17 22:39:05 +00:00
|
|
|
\end{methoddesc}
|
|
|
|
|
|
|
|
\begin{methoddesc}{size}{}
|
|
|
|
Return the length of the file, which can be larger than the size
|
|
|
|
of the memory-mapped area.
|
|
|
|
\end{methoddesc}
|
|
|
|
|
|
|
|
\begin{methoddesc}{tell}{}
|
|
|
|
Returns the current position of the file pointer.
|
|
|
|
\end{methoddesc}
|
|
|
|
|
|
|
|
\begin{methoddesc}{write}{\var{string}}
|
|
|
|
Write the bytes in \var{string} into memory at the current position of
|
|
|
|
the file pointer; the file position is updated to point after the
|
|
|
|
bytes that were written.
|
|
|
|
\end{methoddesc}
|
|
|
|
|
|
|
|
\begin{methoddesc}{write_byte}{\var{byte}}
|
2000-09-05 13:50:21 +00:00
|
|
|
Write the single-character string \var{byte} into memory at the
|
|
|
|
current position of the file pointer; the file position is advanced by
|
|
|
|
\code{1}.
|
2000-06-17 22:39:05 +00:00
|
|
|
\end{methoddesc}
|