\section{\module{mac} ---
         Implementations for the \module{os} module}

\declaremodule{builtin}{mac}
  \platform{Mac}
\modulesynopsis{Implementations for the \module{os} module.}


This module implements the operating system dependent functionality
provided by the standard module \module{os}\refstmodindex{os}.  It is
best accessed through the \module{os} module.

The following functions are available in this module:
\function{chdir()},
\function{close()},
\function{dup()},
\function{fdopen()},
\function{getcwd()},
\function{lseek()},
\function{listdir()},
\function{mkdir()},
\function{open()},
\function{read()},
\function{rename()},
\function{rmdir()},
\function{stat()},
\function{sync()},
\function{unlink()},
\function{write()},
as well as the exception \exception{error}. Note that the times
returned by \function{stat()} are floating-point values, like all time
values in MacPython.

One additional function is available, but only under Classic MacPython,
not under Carbon MacPython:

\begin{funcdesc}{xstat}{path}
  This function returns the same information as \function{stat()}, but
  with three additional values appended: the size of the resource fork
  of the file and its 4-character creator and type.
  Availability: Classic MacPython only.
  \deprecated{2.3}{Use the \function{\refmodule{macfs}.FSSpec()}
                   function to get an FSSpec object for the file, then
                   use the \method{GetCreatorType()} method to get the
                   creator and type information.  It will no longer be
                   possible to get the size of the resource fork.}
\end{funcdesc}


\section{\module{macpath} ---
         MacOS path manipulation functions}

\declaremodule{standard}{macpath}
% Could be labeled \platform{Mac}, but the module should work anywhere and
% is distributed with the standard library.
\modulesynopsis{MacOS path manipulation functions.}


This module is the Macintosh implementation of the \module{os.path}
module.  It is most portably accessed as
\module{os.path}\refstmodindex{os.path}.  Refer to the
\citetitle[../lib/lib.html]{Python Library Reference} for
documentation of \module{os.path}.

The following functions are available in this module:
\function{normcase()},
\function{normpath()},
\function{isabs()},
\function{join()},
\function{split()},
\function{isdir()},
\function{isfile()},
\function{walk()},
\function{exists()}.
For other functions available in \module{os.path} dummy counterparts
are available.
