% Manual text by Jaap Vermeulen
\section{Built-in Module \sectcode{fcntl}}
\bimodindex{fcntl}
\indexii{\UNIX{}}{file control}
\indexii{\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:

\renewcommand{\indexsubitem}{(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):

\bcode\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}\ecode
%
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.
