Author(s): Daniel Cabeza, Mats Carlsson.
Version: 1.3#121 (1999/11/26, 20:23:11 MET)
This module provides basic predicates for handling files and streams, in order to make input/output on them.
streams_basic
)open/3
,
close/1
,
set_input/1
,
current_input/1
,
set_output/1
,
current_output/1
,
character_count/2
,
line_count/2
,
line_position/2
,
flush_output/1
,
flush_output/0
,
clearerr/1
,
current_stream/3
,
stream_code/2
,
absolute_file_name/2
,
absolute_file_name/7
.
sourcename/1
,
stream/1
,
io_mode/1
.
file_search_path/2
,
library_directory/1
.
streams_basic
)
open(File,Mode,Stream)
Open File
with mode Mode
and return in Stream
the stream associated with the file. No extension is implicit in File
.
Usage 1: open(+sourcename,+io_mode,?(stream))
* ISO *
Usage 2: open(+int,+io_mode,?(stream))
File
is an integer, it is assumed to be a file descriptor passed to Prolog from a foreign function call. The file descriptor is connected to a Prolog stream (invoking the UNIX function fdopen
) which is unified with Stream
.
close(Stream)
Close the stream Stream
.
The predicate is of type implicit.
Usage: close(+stream)
* ISO *
set_input(Stream)
Set the current input stream to Stream
. A notion of
current input stream is maintained by the system, so that input predicates with no explicit stream operate on the current input stream. Initially it is set to user_input
.
The predicate is of type implicit.
Usage: set_input(+stream)
* ISO *
current_input(Stream)
Unify Stream
with the
current input stream.
The predicate is of type implicit.
Usage: current_input(?(stream))
* ISO *
set_output(Stream)
Set the current output stream to Stream
. A notion of
current output stream is maintained by the system, so that output predicates with no explicit stream operate on the current output stream. Initially it is set to user_output
.
The predicate is of type implicit.
Usage: set_output(+stream)
* ISO *
current_output(Stream)
Unify Stream
with the
current output stream.
The predicate is of type implicit.
Usage: current_output(?(stream))
* ISO *
character_count(Stream,Count)
Count
characters have been read from or written to Stream
.
The predicate is of type implicit.
Usage: character_count(+stream,?(int))
line_count(Stream,Count)
Count
lines have been read from or written to Stream
.
The predicate is of type implicit.
Usage: line_count(+stream,?(int))
line_position(Stream,Count)
Count
characters have been read from or written to the current line of Stream
.
The predicate is of type implicit.
Usage: line_position(+stream,?(int))
flush_output(Stream)
Flush any buffered data to output stream Stream
.
The predicate is of type implicit.
Usage: flush_output(+stream)
* ISO *
flush_output
Behaves like current_output(S), flush_output(S)
The predicate is of type implicit.
Usage: * ISO *
clearerr(Stream)
Clear the end-of-file and error indicators for input stream Stream
.
The predicate is of type implicit.
Usage: clearerr(+stream)
current_stream(Filename,Mode,Stream)
Stream
is a stream which was opened in mode Mode
and which is connected to the absolute file name Filename
(an atom) or to the file descriptor Filename
(an integer). This predicate can be used for enumerating all currently open streams through backtracking.
The predicate is of type implicit.
Usage 1: current_stream(?(atm),?(io_mode),?(stream))
Usage 2: current_stream(?(int),?(io_mode),?(stream))
stream_code(Stream,StreamCode)
StreamCode
is the file descriptor (an integer) corresponding to the Prolog stream Stream
.
The predicate is of type implicit.
Usage 1: stream_code(+stream,?(int))
Usage 2: stream_code(-(stream),+int)
absolute_file_name(RelFileSpec,AbsFileSpec)
If RelFileSpec
is an absolute pathname then do an absolute lookup. If RelFileSpec
is a relative pathname then prefix the name with the name of the current directory and do an absolute lookup. If RelFileSpec
is a path alias, perform the lookup following the path alias rules (see
sourcename/1
). In all cases: if a matching file with suffix .pl
exists, then AbsFileSpec
will be unified with this file. Failure to open a file normally causes an exception. The behaviour can be controlled by the fileerrors
prolog flag.
Usage: absolute_file_name(+RelFileSpec,-(AbsFileSpec))
AbsFileSpec
is the absolute name (with full path) of RelFileSpec
.
+RelFileSpec
is a source name.
(streams_basic:sourcename/1
)
-(AbsFileSpec)
is an atom.
(basic_props:atm/1
)
absolute_file_name(Spec,Opt,Suffix,CurrDir,AbsFile,AbsBase,AbsDir)
AbsFile
is the absolute name (with full path) of Spec
, which has an optional first suffix Opt
and an optional second suffix Suffix
, when the current directory is CurrDir
. AbsBase
is the same as AbsFile
, but without the second suffix, and AbsDir
is the absolute path of the directory where AbsFile
is. The Ciao compiler invokes this predicate with Opt
='_opt' and Suffix
='.pl' when searching source files.
Usage: absolute_file_name(+sourcename,+atm,+atm,+atm,-(atm),-(atm),-(atm))
A source name is a flexible way of referring to a concrete file. A source name is either a relative or absolute filename given as:
In all cases certain filename extensions (e.g., .pl
) can be implicit. In the first form above, file names can be relative to the current directory. Also, file names beginning with ~
or $
are treated specially. For example,
'~/ciao/sample.pl'
'/home/staff/herme/ciao/sample.pl'
, if /home/staff/herme
is the user's home directory. (This is also equivalent to '$HOME/ciao/sample.pl'
as explained below.)
'~bardo/prolog/sample.pl'
'/home/bardo/prolog/sample.pl'
, if /home/bardo
is bardo's home directory.
'$UTIL/sample.pl'
'/usr/local/src/utilities/sample.pl'
, if /usr/local/src/utilities
is the value of the environment variable UTIL
.
The second form allows using path aliases. Such aliases allow refering to files not with absolute file system paths but with paths which are relative to predefined (or user-defined) abstract names. For example, given the path alias myutils
which has been defined to refer to path '/home/bardo/utilities'
, if that directory contains the file stuff.pl
then the term myutils(stuff)
in a
use_module/1
declaration would refer to the file '/home/bardo/utilities/stuff.pl'
(the .pl
extension is implicit in the
use_module/1
declaration). As a special case, if that directory contains a subdirectory named stuff
which in turn contains the file stuff.pl
, the same term would refer to the file '/home/bardo/utilities/stuff/stuff.pl'
. If a path alias is related to several paths, all paths are scanned in sequence until a match is found. For information on predefined path aliases or how to define new path aliases, see
file_search_path/2
.
Usage: sourcename(F)
F
is a source name.
basic_props:regtype/1
)
Streams correspond to the file pointers used at the operating system level, and usually represent opened files. There are four special streams which correspond with the operating system standard streams:
user_input
user_output
user_error
user
Usage: stream(S)
S
is an open stream.
basic_props:regtype/1
)
Can have the following values:
read
write
append
Usage: io_mode(M)
M
is an opening mode ('read', 'write' or 'append').
basic_props:regtype/1
)
streams_basic
)
file_search_path(Alias,Path)
The
path alias Alias
is linked to path Path
. Both arguments must be atoms. New facts (or clauses) of this predicate can be asserted to define new path aliases. Predefined path aliases in CIAO are:
library
library_directory/1
.
engine
.
'.'
).
The predicate is multifile and of type dynamic.
library_directory(Path)
Path
is a library path (a path represented by the
path alias library
). Predefined library paths in CIAO are '$CIAOLIB/lib'
, '$CIAOLIB/library'
, and '$CIAOLIB/contrib'
, given that $CIAOLIB
is the path of the root ciao library directory. More library paths can be defined by asserting new facts (or clauses) of this predicate.
The predicate is multifile and of type dynamic.
Go to the first, previous, next, last section, table of contents.