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

If the library modules \code{FCNTL} or \code{IOCTL} are missing, you
can find the opcodes in the C include files \code{sys/fcntl} and
\code{sys/ioctl}. You can create the modules yourself with the h2py
script, found in the \code{Tools/scripts} directory.
\stmodindex{FCNTL}
\stmodindex{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.
