% By Skip Montanaro

\section{Standard Module \module{stat}}
\stmodindex{stat}
\label{module-stat}

The \code{stat} module defines constants and functions for interpreting the
results of \code{os.stat()} and \code{os.lstat()} (if they exist).
For complete details about the \code{stat()} and \code{lstat()} system
calls, consult your local man pages.

The \code{stat} module defines the following functions:


\begin{funcdesc}{S_ISDIR}{mode}
Return non-zero if the mode was gotten from a directory.
\end{funcdesc}

\begin{funcdesc}{S_ISCHR}{mode}
Return non-zero if the mode was gotten from a character special device.
\end{funcdesc}

\begin{funcdesc}{S_ISBLK}{mode}
Return non-zero if the mode was gotten from a block special device.
\end{funcdesc}

\begin{funcdesc}{S_ISREG}{mode}
Return non-zero if the mode was gotten from a regular file.
\end{funcdesc}

\begin{funcdesc}{S_ISFIFO}{mode}
Return non-zero if the mode was gotten from a FIFO.
\end{funcdesc}

\begin{funcdesc}{S_ISLNK}{mode}
Return non-zero if the mode was gotten from a symbolic link.
\end{funcdesc}

\begin{funcdesc}{S_ISSOCK}{mode}
Return non-zero if the mode was gotten from a socket.
\end{funcdesc}

All the data items below are simply symbolic indexes into the 10-tuple
returned by \code{os.stat()} or \code{os.lstat()}.  

\begin{datadesc}{ST_MODE}
Inode protection mode.
\end{datadesc}

\begin{datadesc}{ST_INO}
Inode number.
\end{datadesc}

\begin{datadesc}{ST_DEV}
Device inode resides on.
\end{datadesc}

\begin{datadesc}{ST_NLINK}
Number of links to the inode.
\end{datadesc}

\begin{datadesc}{ST_UID}
User id of the owner.
\end{datadesc}

\begin{datadesc}{ST_GID}
Group id of the owner.
\end{datadesc}

\begin{datadesc}{ST_SIZE}
File size in bytes.
\end{datadesc}

\begin{datadesc}{ST_ATIME}
Time of last access.
\end{datadesc}

\begin{datadesc}{ST_MTIME}
Time of last modification.
\end{datadesc}

\begin{datadesc}{ST_CTIME}
Time of last status change (see manual pages for details).
\end{datadesc}

Example:

\begin{verbatim}
import os, sys
from stat import *

def process(dir, func):
    '''recursively descend the directory rooted at dir, calling func for
       each regular file'''

    for f in os.listdir(dir):
        mode = os.stat('%s/%s' % (dir, f))[ST_MODE]
        if S_ISDIR(mode):
            # recurse into directory
            process('%s/%s' % (dir, f), func)
        elif S_ISREG(mode):
            func('%s/%s' % (dir, f))
        else:
            print 'Skipping %s/%s' % (dir, f)

def f(file):
    print 'frobbed', file

if __name__ == '__main__': process(sys.argv[1], f)
\end{verbatim}
