Additional operating system utilities

Author(s): Manuel Hermenegildo, Jose F. Morales.

This module groups some extensions to library system that have been found convenient, but which are still in development, their interface has not been fixed, etc.

Documentation on exports

Usage:warn_on_nosuccess(G)

Call G (cutting solutions, i.e., as once/1) and show warning messages if something went wrong (failure and exceptions).

    Meta-predicate with arguments: warn_on_nosuccess(goal).

    Usage:ignore_nosuccess(G)

    Call G and ignore if something went wrong (failure and exceptions).

      Meta-predicate with arguments: ignore_nosuccess(goal).

      Usage:del_dir_if_empty(D)

      Delete D if it is an empty directory.

      PREDICATEempty_dir/1

      Usage:empty_dir(D)

      D is an empty directory

      PREDICATEmove_files/2

      Usage:move_files(Files,Dir)

      Move Files to directory Dir (note that to move only one file to a directory, rename_file/2 can be used).

      PREDICATEmove_file/2

      Usage:move_file(File,Dir)

      Move File to directory Dir

      PREDICATEcopy_files/2

      Usage:copy_files(Files,Dir)

      Like copy_files/3, with empty options list.

      PREDICATEcopy_files/3

      Usage:copy_files(Files,Dir,Opts)

      Copy Files to directory Dir, using Opts as the option list for copy. See copy_file/3 for the list of options. Note that to move only one file to a directory, rename_file/2 can be used.

      Usage:copy_files_nofail(Files,Dir,Opts)

      Like copy_files/3, but do not fail in case of errors.

      Usage:del_file_nofail(File)

      Like delete_file/1, but do not fail in case of errors.

      • The following properties should hold at call time:
        (basic_props:atm/1)File is an atom.

      Usage:del_files_nofail(Files)

      Like del_file_nofail/1, but takes list of files in Files.

      • The following properties should hold at call time:
        (basic_props:list/2)Files is a list of atms.

      Usage:file_to_line(File,Str)

      Usage:replace_strings_in_file(Ss,F1,F2)

      Like replace_strings/3 but from file F1 to file F2.

      PREDICATEbackup_file/1

      Usage:backup_file(FileName)

      Save a backup copy of file FileName

      • The following properties should hold at call time:
        (basic_props:atm/1)FileName is an atom.

      Usage:move_if_diff(From,To,NewOrOld)

      If To does not exist, or its contents are different from From, delete To and rename From to To. NewOrOld is unified with new or old depending on whether the new or the old file is preserved.

      Usage:set_file_owner(File,Owner)

      Set user/group of a file.

      • The following properties should hold at call time:
        (term_typing:nonvar/1)File is currently a term which is not a free variable.
        (term_typing:nonvar/1)Owner is currently a term which is not a free variable.

      Usage:set_file_perms(File,Perms)

      Set permissions of File to Perms.

      perms_term(Perms)

      Perms is a term providing valid permissions (“modes”) for User, Group, and Others. These are all valid_mode/1s. Defined as follows:

      perms_term(perms(U,G,O)) :-
          valid_mode(U),
          valid_mode(G),
          valid_mode(O).
      

      Usage:perms_term(Perms)

      Perms is a term providing modes for User, Group, and Others.

        valid_mode(Mode)

        Mode is an atom that provides a valid set of file permissions (a valid “mode”). Defined as follows:

        valid_mode(”).
        valid_mode('X').
        valid_mode(x).
        valid_mode(w).
        valid_mode(wX).
        valid_mode(wx).
        valid_mode(r).
        valid_mode(rX).
        valid_mode(rx).
        valid_mode(rw).
        valid_mode(rwX).
        valid_mode(rwx).
        

        Usage:valid_mode(Mode)

        Mode is a file permissions mode.

          Usage:set_exec_perms(File,Perms)

          Set file permissions, but treat regular files as directories w.r.t. 'X' flag

            PREDICATEmkpath/1

            Usage:mkpath(Path)

            Creates the directories necessary to access the given Path (which can be absolute or relative).

            PREDICATEmkpath/2

            Usage:mkpath(Path,Perms)

            Like mkpath, but sets permissions of new directories as Perms.

            PREDICATEmkpath/3

            Usage:mkpath(Path,Perms,Owner)

            Like mkpath, but sets permissions and owner of new directories to Perms and Owner.

            PREDICATEmkpath_mode/3
            No further documentation available for this predicate.

            PREDICATEmkpath_mode/2

            Usage:

            Equivalent to mkpath_mode(Path,Mode,_).

            PREDICATEmkpath_mode/1

            Usage:

            Equivalent to mkpath_mode(Path,0o777,_).

            Usage:mktempdir_in_tmp(Template,Path)

            Create a directory in the temporary directory using Template (see mktemp_in_tmp/2). An empty file CREATED_WITH_MKTEMPDIR is created inside Path as a safety check for rmtempdir/1.

              PREDICATErmtempdir/1

              Usage:rmtempdir(Path)

              Remove the temporary directory Path (recursively) created with mktempdir_in_tmp/2. As a safety check, this predicate throws an exception if the CREATED_WITH_MKTEMPDIR file is not in Path.

                Usage:create_rel_link(From,To)

                Create a relocatable symlink (computing relative paths) (e.g., /a/b/c (symlink) -> /a/d/e becomes /a/b/c (symlink) -> ../d/e

                  PREDICATEcreate_link/2

                  Usage:create_link(From,To)

                  Create a symlink from From to To. On platforms where symlinks are not supported (Windows) the file is copied instead. The file To is removed if it existed before.

                    PREDICATErelpath/3

                    Usage:relpath(A,B,C)

                    C is a path to B relative to A (using .. if needed) (e.g., /a/b/c -> /a/d/e becomes /a/b/c -> ../../d/e. Assume both are absolute, otherwise just return B.

                      PREDICATEusing_tty/0

                      Usage:

                      The standard input is an interactive terminal.

                        PREDICATEdatime_atom/1
                        No further documentation available for this predicate.

                        PREDICATEdatime_atom/2
                        No further documentation available for this predicate.

                        No further documentation available for this predicate.

                        No further documentation available for this predicate.

                        No further documentation available for this predicate.

                        No further documentation available for this predicate.

                        Documentation on imports

                        This module has the following direct dependencies:

                        Known bugs and planned improvements

                        • Much of this should probably end up eventually in system, but once we have worked out the best interface and, in some cases, the proper implementation (the implementations in here are in some cases just calls to Unix shell primitives or commands).
                        • All these predicates (including system too) use atoms to represent file names. This pollutes the atom table. We need atom garbage collection and/or native strings.