blob: a8a6d71a2b2106c5f349a7d1e782cd6acdc6b25d [file] [log] [blame]
Guido van Rossum7f61b351994-05-19 09:09:50 +00001% Manual text and implementation by Jaap Vermeulen
2\section{Standard Module \sectcode{posixfile}}
Fred Drake1f3ab1c1998-02-18 15:22:08 +00003\label{module-posixfile}
Guido van Rossum7f61b351994-05-19 09:09:50 +00004\bimodindex{posixfile}
Fred Drake1f3ab1c1998-02-18 15:22:08 +00005\indexii{\POSIX{}}{file object}
Guido van Rossum7f61b351994-05-19 09:09:50 +00006
Guido van Rossum9b058111996-10-11 17:43:34 +00007\emph{Note:} This module will become obsolete in a future release.
8The locking operation that it provides is done better and more
Fred Drake295eaa81998-03-11 06:11:37 +00009portably by the \function{fcntl.lockf()} call.%
10\index{lockf()@\idxcode{lockf()} (in module fcntl)}
Guido van Rossum9b058111996-10-11 17:43:34 +000011
Guido van Rossum7f61b351994-05-19 09:09:50 +000012This module implements some additional functionality over the built-in
13file objects. In particular, it implements file locking, control over
14the file flags, and an easy interface to duplicate the file object.
15The module defines a new file object, the posixfile object. It
Guido van Rossum470be141995-03-17 16:07:09 +000016has all the standard file object methods and adds the methods
17described below. This module only works for certain flavors of
Fred Drake295eaa81998-03-11 06:11:37 +000018\UNIX{}, since it uses \function{fcntl()} for file locking.
Guido van Rossum7f61b351994-05-19 09:09:50 +000019
Fred Drake295eaa81998-03-11 06:11:37 +000020To instantiate a posixfile object, use the \function{open()} function
21in the \module{posixfile} module. The resulting object looks and
22feels roughly the same as a standard file object.
Guido van Rossum7f61b351994-05-19 09:09:50 +000023
Fred Drake295eaa81998-03-11 06:11:37 +000024The \module{posixfile} module defines the following constants:
Guido van Rossum7f61b351994-05-19 09:09:50 +000025
Fred Drake295eaa81998-03-11 06:11:37 +000026
Guido van Rossum7f61b351994-05-19 09:09:50 +000027\begin{datadesc}{SEEK_SET}
Fred Drakea19bb9b1998-02-13 21:57:33 +000028Offset is calculated from the start of the file.
Guido van Rossum7f61b351994-05-19 09:09:50 +000029\end{datadesc}
30
31\begin{datadesc}{SEEK_CUR}
Fred Drakea19bb9b1998-02-13 21:57:33 +000032Offset is calculated from the current position in the file.
Guido van Rossum7f61b351994-05-19 09:09:50 +000033\end{datadesc}
34
35\begin{datadesc}{SEEK_END}
Fred Drakea19bb9b1998-02-13 21:57:33 +000036Offset is calculated from the end of the file.
Guido van Rossum7f61b351994-05-19 09:09:50 +000037\end{datadesc}
38
Fred Drake295eaa81998-03-11 06:11:37 +000039The \module{posixfile} module defines the following functions:
Guido van Rossum7f61b351994-05-19 09:09:50 +000040
Guido van Rossum470be141995-03-17 16:07:09 +000041
Fred Drake295eaa81998-03-11 06:11:37 +000042\begin{funcdesc}{open}{filename\optional{, mode\optional{, bufsize}}}
Guido van Rossum7f61b351994-05-19 09:09:50 +000043 Create a new posixfile object with the given filename and mode. The
Guido van Rossum470be141995-03-17 16:07:09 +000044 \var{filename}, \var{mode} and \var{bufsize} arguments are
Fred Drake295eaa81998-03-11 06:11:37 +000045 interpreted the same way as by the built-in \function{open()}
46 function.
Guido van Rossum7f61b351994-05-19 09:09:50 +000047\end{funcdesc}
48
Guido van Rossum31cce971995-01-04 19:17:34 +000049\begin{funcdesc}{fileopen}{fileobject}
Guido van Rossum7f61b351994-05-19 09:09:50 +000050 Create a new posixfile object with the given standard file object.
51 The resulting object has the same filename and mode as the original
52 file object.
53\end{funcdesc}
54
55The posixfile object defines the following additional methods:
56
Fred Drake19479911998-02-13 06:58:54 +000057\setindexsubitem{(posixfile method)}
Fred Drake295eaa81998-03-11 06:11:37 +000058\begin{funcdesc}{lock}{fmt, \optional{len\optional{, start\optional{, whence}}}}
Guido van Rossum7f61b351994-05-19 09:09:50 +000059 Lock the specified section of the file that the file object is
Guido van Rossum16d6e711994-08-08 12:30:22 +000060 referring to. The format is explained
61 below in a table. The \var{len} argument specifies the length of the
62 section that should be locked. The default is \code{0}. \var{start}
63 specifies the starting offset of the section, where the default is
64 \code{0}. The \var{whence} argument specifies where the offset is
Fred Drake295eaa81998-03-11 06:11:37 +000065 relative to. It accepts one of the constants \constant{SEEK_SET},
66 \constant{SEEK_CUR} or \constant{SEEK_END}. The default is
67 \constant{SEEK_SET}. For more information about the arguments refer
68 to the \manpage{fcntl}{2} manual page on your system.
Guido van Rossum7f61b351994-05-19 09:09:50 +000069\end{funcdesc}
70
Guido van Rossum96628a91995-04-10 11:34:00 +000071\begin{funcdesc}{flags}{\optional{flags}}
Guido van Rossum7f61b351994-05-19 09:09:50 +000072 Set the specified flags for the file that the file object is referring
73 to. The new flags are ORed with the old flags, unless specified
74 otherwise. The format is explained below in a table. Without
Guido van Rossum96628a91995-04-10 11:34:00 +000075 the \var{flags} argument
76 a string indicating the current flags is returned (this is
Fred Drake295eaa81998-03-11 06:11:37 +000077 the same as the \samp{?} modifier). For more information about the
78 flags refer to the \manpage{fcntl}{2} manual page on your system.
Guido van Rossum7f61b351994-05-19 09:09:50 +000079\end{funcdesc}
80
81\begin{funcdesc}{dup}{}
82 Duplicate the file object and the underlying file pointer and file
83 descriptor. The resulting object behaves as if it were newly
84 opened.
85\end{funcdesc}
86
87\begin{funcdesc}{dup2}{fd}
88 Duplicate the file object and the underlying file pointer and file
89 descriptor. The new object will have the given file descriptor.
90 Otherwise the resulting object behaves as if it were newly opened.
91\end{funcdesc}
92
93\begin{funcdesc}{file}{}
94 Return the standard file object that the posixfile object is based
95 on. This is sometimes necessary for functions that insist on a
96 standard file object.
97\end{funcdesc}
98
Fred Drake295eaa81998-03-11 06:11:37 +000099All methods raise \exception{IOError} when the request fails.
Guido van Rossum7f61b351994-05-19 09:09:50 +0000100
Fred Drake295eaa81998-03-11 06:11:37 +0000101Format characters for the \method{lock()} method have the following
102meaning:
Guido van Rossum7f61b351994-05-19 09:09:50 +0000103
Fred Drake7f962911997-12-23 04:21:20 +0000104\begin{tableii}{|c|l|}{samp}{Format}{Meaning}
105 \lineii{u}{unlock the specified region}
106 \lineii{r}{request a read lock for the specified section}
107 \lineii{w}{request a write lock for the specified section}
108\end{tableii}
Guido van Rossum7f61b351994-05-19 09:09:50 +0000109
110In addition the following modifiers can be added to the format:
111
112\begin{tableiii}{|c|l|c|}{samp}{Modifier}{Meaning}{Notes}
113 \lineiii{|}{wait until the lock has been granted}{}
Guido van Rossum470be141995-03-17 16:07:09 +0000114 \lineiii{?}{return the first lock conflicting with the requested lock, or
115 \code{None} if there is no conflict.}{(1)}
Guido van Rossum7f61b351994-05-19 09:09:50 +0000116\end{tableiii}
117
118Note:
119
Fred Drake295eaa81998-03-11 06:11:37 +0000120(1) The lock returned is in the format \code{(\var{mode}, \var{len},
121\var{start}, \var{whence}, \var{pid})} where \var{mode} is a character
122representing the type of lock ('r' or 'w'). This modifier prevents a
123request from being granted; it is for query purposes only.
Guido van Rossum7f61b351994-05-19 09:09:50 +0000124
Fred Drake295eaa81998-03-11 06:11:37 +0000125Format characters for the \method{flags()} method have the following
126meanings:
Guido van Rossum7f61b351994-05-19 09:09:50 +0000127
Fred Drake7f962911997-12-23 04:21:20 +0000128\begin{tableii}{|c|l|}{samp}{Format}{Meaning}
129 \lineii{a}{append only flag}
130 \lineii{c}{close on exec flag}
131 \lineii{n}{no delay flag (also called non-blocking flag)}
132 \lineii{s}{synchronization flag}
133\end{tableii}
Guido van Rossum7f61b351994-05-19 09:09:50 +0000134
135In addition the following modifiers can be added to the format:
136
137\begin{tableiii}{|c|l|c|}{samp}{Modifier}{Meaning}{Notes}
138 \lineiii{!}{turn the specified flags 'off', instead of the default 'on'}{(1)}
139 \lineiii{=}{replace the flags, instead of the default 'OR' operation}{(1)}
140 \lineiii{?}{return a string in which the characters represent the flags that
141 are set.}{(2)}
142\end{tableiii}
143
144Note:
145
146(1) The \code{!} and \code{=} modifiers are mutually exclusive.
147
Guido van Rossum16d6e711994-08-08 12:30:22 +0000148(2) This string represents the flags after they may have been altered
Guido van Rossum7f61b351994-05-19 09:09:50 +0000149by the same call.
150
151Examples:
152
Fred Drake19479911998-02-13 06:58:54 +0000153\begin{verbatim}
Fred Drake295eaa81998-03-11 06:11:37 +0000154import posixfile
Guido van Rossum7f61b351994-05-19 09:09:50 +0000155
Fred Drake295eaa81998-03-11 06:11:37 +0000156file = posixfile.open('/tmp/test', 'w')
Guido van Rossum7f61b351994-05-19 09:09:50 +0000157file.lock('w|')
158...
159file.lock('u')
160file.close()
Fred Drake19479911998-02-13 06:58:54 +0000161\end{verbatim}