This module provides basic predicates for handling files and streams, in order to make input/output on them.
Open File with mode Mode and return in Stream the stream associated with the file. No extension is implicit in File.
In the special case that 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 C POSIX function fdopen()) which is unified with Stream.
Same as open(File, Mode, Stream) with options Options. See the definition of open_option_list/1 for details.
All file locking is implemented via the POSIX function fcntl(). Please refer to its manual page for details.
L is a list of options for open/4.
Close the stream 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.
Unify Stream with the current input stream. In addition to the ISO behavior, stream aliases are allowed. This is useful for most applications checking whether a stream is the standard input or output.
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.
Count characters have been read from or written to Stream.
Count lines have been read from or written to Stream.
Count characters have been read from or written to the current line of Stream.
Flush any buffered data to output stream Stream.
Behaves like current_output(S), flush_output(S)
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.
StreamCode is the file descriptor (an integer) corresponding to the Prolog stream Stream.
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.
AbsFileSpec is the absolute name (with full path) of RelFileSpec.
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.
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,
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.
F is a source name.
S is an open stream.
S is the alias of an open stream, i.e., an atom which represents a stream at Prolog level.
M is an opening mode ('read', 'write' or 'append').
atm_or_int(X) :- atm(X). atm_or_int(X) :- int(X).
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:
Path is a library path (a path represented by the path alias library). More library paths can be defined by asserting new facts (or clauses) of this predicate.
The predicate is multifile.
The predicate is of type dynamic.