Author(s): Daniel Cabeza, Manuel Carro.
Version: 1.10#7 (2006/4/26, 19:22:13 CEST)
Version of last change: 1.9#365 (2004/7/28, 1:10:31 CEST)
This module contains predicates for invoking services which are typically provided by the operating system. Note that the predicates which take names of files or directories as arguments in this module expect atoms, not
path aliases. I.e., generally these predicates will not call
absolute_file_name/2
on names of files or directories taken as arguments.
system
):- use_module(library(system)).
pause/1
,
time/1
,
datime/1
,
datime/9
,
getenvstr/2
,
setenvstr/2
,
extract_paths/2
,
get_pid/1
,
current_host/1
,
current_executable/1
,
umask/2
,
make_directory/2
,
make_directory/1
,
make_dirpath/2
,
make_dirpath/1
,
working_directory/2
,
cd/1
,
shell/0
,
shell/1
,
shell/2
,
system/1
,
system/2
,
popen/3
,
exec/4
,
exec/3
,
exec/8
,
wait/3
,
directory_files/2
,
mktemp/2
,
file_exists/1
,
file_exists/2
,
file_property/2
,
file_properties/6
,
modif_time/2
,
modif_time0/2
,
fmode/2
,
chmod/2
,
chmod/3
,
delete_file/1
,
delete_directory/1
,
rename_file/2
,
cyg2win/3
.
datime_struct/1
,
popen_mode/1
.
define_flag/3
.
system
)
pause(Seconds)
Make this thread sleep for some Seconds
.
time(Time)
Time
is unified with the number of seconds elapsed since January, 1, 1970 (UTC).
datime(Datime)
Datime
is unified with a term of the form datime(Year,Month,Day,Hour,Minute,Second)
which contains the current date and time.
datime(Time, Year, Month, Day, Hour, Min, Sec, WeekDay, YearDay)
Time
is as in
time/1
. WeekDay
is the number of days since Sunday, in the range 0 to 6. YearDay
is the number of days since January 1, in the range 0 to 365.
Usage 1: datime(+int, ?int, ?int, ?int, ?int, ?int, ?int, ?int, ?int)
Time
is given, the rest of the arguments are unified with the date and time to which the Time
argument refers.
Usage 2: datime(-int, ?int, ?int, ?int, ?int, ?int, ?int, ?int, ?int)
Time
to current time and the rest of the arguments refer to current time.
A regular type, defined as follows:
datime_struct(datime(Year,Month,Day,Hour,Min,Sec)) :- int(Year), int(Month), int(Day), int(Hour), int(Min), int(Sec).
getenvstr(Name, Value)
The environment variable Name
has Value
. Fails if variable Name
is not defined.
setenvstr(Name, Value)
The environment variable Name
is assigned Value
.
extract_paths(String, Paths)
Interpret String
as the value of a UNIX environment variable holding a list of paths and return in Paths
the list of the paths. Paths in String
are separated by colons, and an empty path is considered a shorthand for '.' (current path). The most typical environment variable with this format is PATH. For example, this is a typical use:
?- set_prolog_flag(write_strings, on). yes ?- getenvstr('PATH', PATH), extract_paths(PATH, Paths). PATH = ":/home/bardo/bin:/home/clip/bin:/opt/bin/:/bin", Paths = [".","/home/bardo/bin","/home/clip/bin","/opt/bin/","/bin"] ? yes ?-
get_pid(Pid)
Unifies Pid
with the process identificator of the current process or thread.
current_host(Hostname)
Hostname
is unified with the fully qualified name of the host.
current_executable(Path)
Unifies Path
with the path to the current executable.
umask(OldMask, NewMask)
The process file creation mask was OldMask
, and it is changed to NewMask
.
Usage 2: umask(OldMask, NewMask)
OldMask
is a free variable.
(term_typing:var/1
)
NewMask
is a free variable.
(term_typing:var/1
)
The terms OldMask
and NewMask
are strictly identical.
(term_compare:== /2
)
OldMask
is an integer.
(basic_props:int/1
)
NewMask
is an integer.
(basic_props:int/1
)
make_directory(DirName, Mode)
Creates the directory DirName
with a given Mode
. This is, as usual, operated against the current umask value.
make_directory(DirName)
Equivalent to make_directory(D,0o777)
.
make_dirpath(Path, Mode)
Creates the whole Path
for a given directory with a given Mode
. As an example, make_dirpath('/tmp/var/mydir/otherdir')
.
make_dirpath(Path)
Equivalent to make_dirpath(D,0o777)
.
working_directory(OldDir, NewDir)
Unifies current working directory with OldDir
, and then changes the working directory to NewDir
. Calling working_directory(Dir,Dir)
simply unifies Dir
with the current working directory without changing anything else.
Usage 2: working_directory(OldDir, NewDir)
OldDir
is a free variable.
(term_typing:var/1
)
NewDir
is a free variable.
(term_typing:var/1
)
The terms OldDir
and NewDir
are strictly identical.
(term_compare:== /2
)
OldDir
is an atom.
(basic_props:atm/1
)
NewDir
is an atom.
(basic_props:atm/1
)
cd(Path)
Changes working directory to Path
.
Usage:
SHELL
. When the shell process terminates, control is returned to Prolog.
shell(Command)
Command
is executed in the shell specified by the environment variable SHELL
. It succeeds if the exit code is zero and fails otherwise.
shell(Command, ReturnCode)
Executes Command
in the shell specified by the environment variable SHELL
and stores the exit code in ReturnCode
.
system(Command, ReturnCode)
Executes Command
in the
/bin/sh
shell and stores the exit code in ReturnCode
.
popen(Command, Mode, Stream)
Open a pipe to process Command
in a new shell with a given Mode
and return a communication Stream
(as in UNIX popen(3)
). If Mode
is read
the output from the process is sent to Stream
. If Mode
is write
, Stream
is sent as input to the process. Stream
may be read from or written into using the ordinary stream I/O predicates. Stream
must be closed explicitly using
close/1
, i.e., it is not closed automatically when the process dies. Note that
popen/2
is defined in ***x as using /bin/sh
, which usually does not exist in Windows systems. In this case, a sh
shell which comes with Windows is used.
Usage: popen_mode(M)
M
is 'read' or 'write'.
exec(Command, StdIn, StdOut, StdErr)
Starts the process Command
and returns the standart I/O streams of the process in StdIn
, StdOut
, and StdErr
. If Command
contains blank spaces, these are taken as separators between a program name (the first chunk of contiguous non-blank characters) and options for the program (the subsequent contiguous pieces of non-blank characters), as in
exec('ls -lRa ../sibling_dir', In, Out, Err)
.
exec(Command, StdIn, StdOut)
Starts the process Command
and returns the standart I/O streams of the process in StdIn
and StdOut
. Standard error
is connected to whichever the parent process had it connected to. Command
is treated and split in components as in
exec/4
.
Usage: exec(+Command, +Arguments, ?StdIn, ?StdOut, ?StdErr, +Background, -PID, -ErrCode)
exec/8
gives a finer control for launching external processes. Command
is the command to be executed and Arguments
is a list of atoms to be passed as arguments to the command. When called with free variables, StdIn
, StdOut
, and StdErr
are instantiated to streams connected to the standard output, input, and error of the created process. Background
controls whether the caller waits for Command
to finish, or if the process executing Command
is completely detached (it can be waited for using
wait/3
). ErrCode
is the error code returned by the lower-level exec()
system call (this return code is system-dependent, but a non-zero value usually means that something has gone wrong). If Command
does not start by a slash,
exec/8
uses the environment variable PATH
to search for it. If PATH
is not set, /bin
and /usr/bin
are searched.
+Command
is an atom.
(basic_props:atm/1
)
+Arguments
is a list of atm
s.
(basic_props:list/2
)
?StdIn
is an open stream.
(streams_basic:stream/1
)
?StdOut
is an open stream.
(streams_basic:stream/1
)
?StdErr
is an open stream.
(streams_basic:stream/1
)
+Background
is an atom.
(basic_props:atm/1
)
-PID
is an integer.
(basic_props:int/1
)
-ErrCode
is an integer.
(basic_props:int/1
)
Usage: wait(+Pid, -RetCode, -Status)
Pid
. If PID
equals -1, it will wait for any children process. RetCode
is usually the PID of the waited-for process, and -1 in case in case of error. Status
is related to the exit value of the process in a system-dependent fashion.
+Pid
is an integer.
(basic_props:int/1
)
-RetCode
is an integer.
(basic_props:int/1
)
-Status
is an integer.
(basic_props:int/1
)
directory_files(Directory, FileList)
FileList
is the unordered list of entries (files, directories, etc.) in Directory
.
mktemp(Template, Filename)
Returns a unique Filename
based on Template
: Template
must be a valid file name with six trailing X, which are substituted to create a new file name.
file_exists(File)
Succeeds if File
(a file or directory) exists (and is accessible).
file_exists(File, Mode)
File
(a file or directory) exists and it is accessible with Mode
, as in the Unix call access(2)
. Typically, Mode
is 4 for read permission, 2 for write permission and 1 for execute permission.
file_property(File, Property)
File
has the property Property
. The possible properties are:
Type
)
Type
is one of regular
, directory
, symlink
, fifo
, socket
or unknown
.
Linkto
)
File
is a symbolic link, Linkto
is the file pointed to by the link (and the other properties come from that file, not from the link itself).
ModTime
)
ModTime
is the time of last modification (seconds since January, 1, 1970).
Protection
)
Protection
is the protection mode.
Size
)
Size
is the size.
If Property
is uninstantiated, the predicate will enumerate the properties on backtracking.
file_properties(Path, Type, Linkto, Time, Protection, Size)
The file Path
has the following properties:
Type
(one of regular
, directory
, symlink
, fifo
, socket
or unknown
).
Path
is a symbolic link, Linkto
is the file pointed to. All other properties come from the file pointed, not the link. Linkto
is " if Path
is not a symbolic link.
Time
(seconds since January, 1, 1970).
Protection
.
Size
.
modif_time(File, Time)
The file File
was last modified at Time
, which is in seconds since January, 1, 1970. Fails if File
does not exist.
modif_time0(File, Time)
If File
exists, Time
is its latest modification time, as in
modif_time/2
. Otherwise, if File
does not exist, Time
is zero.
fmode(File, Mode)
The file File
has protection mode Mode
.
chmod(File, NewMode)
Change the protection mode of file File
to NewMode
.
chmod(File, OldMode, NewMode)
The file File
has protection mode OldMode
and it is changed to NewMode
.
Usage 2: chmod(File, OldMode, NewMode)
File
,OldMode
)
File
is an atom.
(basic_props:atm/1
)
OldMode
is a free variable.
(term_typing:var/1
)
NewMode
is a free variable.
(term_typing:var/1
)
The terms OldMode
and NewMode
are strictly identical.
(term_compare:== /2
)
File
is an atom.
(basic_props:atm/1
)
OldMode
is an atom.
(basic_props:atm/1
)
NewMode
is an atom.
(basic_props:atm/1
)
delete_file(File)
Delete the file File
.
delete_directory(File)
Delete the directory Directory
.
rename_file(File1, File2)
Change the name of File1
to File2
.
Usage: cyg2win(CygWinPath, WindowsPath, SwapSlash)
SwapSlash
is swap
, slashes are converted in to backslash. If it is noswap
, they are preserved.
CygWinPath
is a string (a list of character codes).
(basic_props:string/1
)
WindowsPath
is a free variable.
(term_typing:var/1
)
SwapSlash
is currently instantiated to an atom.
(term_typing:atom/1
)
CygWinPath
is a string (a list of character codes).
(basic_props:string/1
)
WindowsPath
is a string (a list of character codes).
(basic_props:string/1
)
SwapSlash
is currently instantiated to an atom.
(term_typing:atom/1
)
system
)No further documentation available for this predicate.
The predicate is multifile.
system
)shell/n
commands have a bug in Windows: if the environment variable SHELL is instantiated to some Windows shell implementation, then it is very possible that shell/{1,2} will not work, as it is always called with the -c flag to start the user command. For example, COMMAND.COM might need the flag /C -- but there is no way to know a priori which command line option is necessary for every shell! It does not seems usual that Windows sets the SHELL environment variable: if it is not set, we set it up at startup time to point to the sh.exe
provided with Ciao, which is able to start Windows aplications. Therefore, ?- shell('command.com').
just works.
exec/4
does not find the command to be executed, there is no visible error message: it is sent to a error output which has already been assigned to a different stream, disconnected from the one the user sees.
Go to the first, previous, next, last section, table of contents.