% 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:

\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.
