[ Stream I/O | The ECLiPSe Built-In Predicates | Reference Manual | Alphabetic Index ]

# at(+Stream, -Pointer)

Succeeds if Position is the position of the stream Stream.

Stream
  Integer (stream number) or Atom (reserved or user-defined symbolic stream name).
Pointer
  Integer or variable.

## Description

Unifies Position with the position of the given Stream, which is defined as follows:

- For file streams, Position is the position in the file (the offset in bytes from the beginning of the file) where the next read/write operation will occur.
- For tty read streams, Position is the number of bytes already read from the tty. For tty write streams, Position is the number of bytes already written to the tty.
- For pipe read streams, Position is the number of bytes already read from the pipe. For pipe write streams, Position is the number of bytes already written to the pipe.
- For socket streams, Position is the number of bytes already read from the socket.
- For string streams, Position is the position in the string (the offset in bytes from the beginning of the string) where the next read/write operation will occur.
- For queue read streams, Position is always 0. For queue write and queue update streams, Position is the number of unread bytes in the queue.
- For the null stream, Position is always 0.

Stream can be a symbolic stream name or a physical stream number.

### Modes and Determinism

- at(+, -) is det

### Exceptions

(4) instantiation fault
  Stream is not instantiated.
(5) type error
  Pointer is instantiated to a non-integer.
(5) type error
  Stream is instantiated to neither an integer nor an atom.
(192) illegal stream mode
  Stream is an illegal stream mode.

## Examples

    Success:
          [eclipse]: open(file1,write,s), at(s, P1),
          > write(s, 1234567890), at(s, P2), close(s).
          P1 = 0
          P2 = 10
          yes.
          [eclipse]: open(file1,update,s), at(s, P1), read(s, T),
          > at(s, P2), close(s).
          P1 = 0
          T = 1234567890
          P2 = 10
          yes.

    Error:
          at(Stream, 4).      (Error 4).
          at("3", Position).   (Error 5).
          at(7, 4.3).         (Error 5).

## See Also

at_eof / 1, seek / 2