Availability:C-language interface function
IOSTREAM*
from a handle, flags and a block of
callback functions. The flags argument is a bitwise or of
SIO_* flags. Flags that control the creation are:
SIO_INPUT
SIO_OUTPUT
- One of these flags mut be present to indicate whether this is an input or output stream.
SIO_NBUF
SIO_LBUF
SIO_FBUF
- One of these flags must be present to select the buffering as one of
unbuffered (
SIO_NBUF
), line buffered (SIO_LBUF
) or fully buffered (SIO_FBUF
) SIO_TEXT
- If given, this is a text stream and the encoding is set to the default
encoding (see the Prolog flag encoding).
Otherwise this is a binary stream and the encoding is set to
ENC_OCTET
. SIO_RECORDPOS
- If given, enable position maintenance on the stream. This is used by Stell(), Sseek(), stream_property/2
using the
position
property and related predicates. SIO_NOMUTEX
- Used internally to create a stream that cannot be owned or locked.
If the stream is associated with an OS file handle the system
initializes the SIO_ISATTY
flag (on POSIX systems) and if
possible tells the OS not to inherit this stream to child processes.
The symbol Sfilefunctions
is a IOFUNCTIONS
struct that contains the callbacks for accessing a regular file. After
opening an file using the POSIX open() API we can create a stream to
this file using Snew():
int fno = open(path, O_RDONLY); IOSTREAM *s; if ( fno >= 0 ) s = Snew((void*)fno, SIO_INPUT|SIO_FBUF|SIO_RECORDPOS|SIO_TEXT, &Sfilefunctions); ...
Snew() can
only fail if there is not enough memory. In that case the return value
is NULL
and errno is set to ENOMEM
.