74 lines
2.9 KiB
TeX
74 lines
2.9 KiB
TeX
% Manual text by Jaap Vermeulen
|
|
\section{Built-in Module \sectcode{fcntl}}
|
|
\bimodindex{fcntl}
|
|
\indexii{UNIX@\UNIX{}}{file control}
|
|
\indexii{UNIX@\UNIX{}}{I/O control}
|
|
|
|
This module performs file control and I/O control on file descriptors.
|
|
It is an interface to the \dfn{fcntl()} and \dfn{ioctl()} \UNIX{} routines.
|
|
File descriptors can be obtained with the \dfn{fileno()} method of a
|
|
file or socket object.
|
|
|
|
The module defines the following functions:
|
|
|
|
\setindexsubitem{(in module struct)}
|
|
|
|
\begin{funcdesc}{fcntl}{fd\, op\optional{\, arg}}
|
|
Perform the requested operation on file descriptor \code{\var{fd}}.
|
|
The operation is defined by \code{\var{op}} and is operating system
|
|
dependent. Typically these codes can be retrieved from the library
|
|
module \code{FCNTL}. The argument \code{\var{arg}} is optional, and
|
|
defaults to the integer value \code{0}. When
|
|
it is present, it can either be an integer value, or a string. With
|
|
the argument missing or an integer value, the return value of this
|
|
function is the integer return value of the real \code{fcntl()}
|
|
call. When the argument is a string it represents a binary
|
|
structure, e.g.\ created by \code{struct.pack()}. The binary data is
|
|
copied to a buffer whose address is passed to the real \code{fcntl()}
|
|
call. The return value after a successful call is the contents of
|
|
the buffer, converted to a string object. In case the
|
|
\code{fcntl()} fails, an \code{IOError} will be raised.
|
|
\end{funcdesc}
|
|
|
|
\begin{funcdesc}{ioctl}{fd\, op\, arg}
|
|
This function is identical to the \code{fcntl()} function, except
|
|
that the operations are typically defined in the library module
|
|
\code{IOCTL}.
|
|
\end{funcdesc}
|
|
|
|
\begin{funcdesc}{flock}{fd\, op}
|
|
Perform the lock operation \var{op} on file descriptor \var{fd}.
|
|
See the \UNIX{} manual for details. (On some systems, this function is
|
|
emulated using \code{fcntl()}.)
|
|
\end{funcdesc}
|
|
|
|
\begin{funcdesc}{lockf}{fd\, code\, \optional{len\, \optional{start\, \optional{whence}}}}
|
|
This is a wrapper around the \code{F_SETLK} and \code{F_SETLKW}
|
|
\code{fcntl()} calls. See the \UNIX{} manual for details.
|
|
\end{funcdesc}
|
|
|
|
If the library modules \code{FCNTL} or \code{IOCTL} are missing, you
|
|
can find the opcodes in the C include files \file{sys/fcntl.h} and
|
|
\file{sys/ioctl.h}. You can create the modules yourself with the h2py
|
|
script, found in the \file{Tools/scripts} directory.
|
|
\refstmodindex{FCNTL}
|
|
\refstmodindex{IOCTL}
|
|
|
|
Examples (all on a SVR4 compliant system):
|
|
|
|
\begin{verbatim}
|
|
import struct, FCNTL
|
|
|
|
file = open(...)
|
|
rv = fcntl(file.fileno(), FCNTL.O_NDELAY, 1)
|
|
|
|
lockdata = struct.pack('hhllhh', FCNTL.F_WRLCK, 0, 0, 0, 0, 0)
|
|
rv = fcntl(file.fileno(), FCNTL.F_SETLKW, lockdata)
|
|
\end{verbatim}
|
|
%
|
|
Note that in the first example the return value variable \code{rv} will
|
|
hold an integer value; in the second example it will hold a string
|
|
value. The structure lay-out for the \var{lockadata} variable is
|
|
system dependent -- therefore using the \code{flock()} call may be
|
|
better.
|