:mod:`uos` -- basic "operating system" services
===============================================

.. module:: uos
   :synopsis: basic "operating system" services

The ``os`` module contains functions for filesystem access and ``urandom``
function.

Port specifics
--------------

The filesystem has ``/`` as the root directory and the
available physical drives are accessible from here.  They are currently:

    ``/flash``      -- the internal flash filesystem

    ``/sd``         -- the SD card (if it exists)

.. only:: port_pyboard

    On boot up, the current directory is ``/flash`` if no SD card is inserted,
    otherwise it is ``/sd``.

.. only:: port_wipy

    On boot up, the current directory is ``/flash``.

Functions
---------

.. function:: chdir(path)

   Change current directory.

.. function:: getcwd()

   Get the current directory.

.. function:: listdir([dir])

   With no argument, list the current directory.  Otherwise list the given directory.

.. function:: mkdir(path)

   Create a new directory.

.. function:: remove(path)

   Remove a file.

.. function:: rmdir(path)

   Remove a directory.

.. function:: rename(old_path, new_path)

   Rename a file.

.. function:: stat(path)

   Get the status of a file or directory.

.. only:: port_unix or port_pyboard or port_esp8266

    .. function:: statvfs(path)

       Get the status of a fileystem.

       Returns a tuple with the filesystem information in the following order:

            * ``f_bsize`` -- file system block size
            * ``f_frsize`` -- fragment size
            * ``f_blocks`` -- size of fs in f_frsize units
            * ``f_bfree`` -- number of free blocks
            * ``f_bavail`` -- number of free blocks for unpriviliged users
            * ``f_files`` -- number of inodes
            * ``f_ffree`` -- number of free inodes
            * ``f_favail`` -- number of free inodes for unpriviliged users
            * ``f_flag`` -- mount flags
            * ``f_namemax`` -- maximum filename length

       Parameters related to inodes: ``f_files``, ``f_ffree``, ``f_avail``
       and the ``f_flags`` parameter may return ``0`` as they can be unavailable
       in a port-specific implementation.

.. function:: sync()

   Sync all filesystems.

.. function:: urandom(n)

   Return a bytes object with n random bytes, generated by the hardware
   random number generator.

.. only:: port_wipy

    .. function:: mount(block_device, mount_point, \*, readonly=False)

       Mounts a block device (like an ``SD`` object) in the specified mount
       point. Example::

          os.mount(sd, '/sd')

    .. function:: unmount(path)

       Unmounts a previously mounted block device from the given path.

    .. function:: mkfs(block_device or path)

       Formats the specified path, must be either ``/flash`` or ``/sd``.
       A block device can also be passed like an ``SD`` object before
       being mounted.

    .. function:: dupterm(stream_object)

       Duplicate the terminal (the REPL) on the passed stream-like object.
       The given object must at least implement the ``.read()`` and ``.write()`` methods.

Constants
---------

.. data:: sep

   separation character used in paths