/ api / name / gb_stream_desc
GB_STREAM_DESC
Syntax

    struct GB_STREAM;

    typedef
      struct {
        int (*open)(struct GB_STREAM *stream, const char *path, int mode, void *data);
        int (*close)(struct GB_STREAM *stream);
        int (*read)(struct GB_STREAM *stream, char *buffer, long len);
        int (*write)(struct GB_STREAM *stream, char *buffer, long len);
        int (*seek)(struct GB_STREAM *stream, long long pos, int whence);
        int (*tell)(struct GB_STREAM *stream, long long *pos);
        int (*flush)(struct GB_STREAM *stream);
        int (*eof)(struct GB_STREAM *stream);
        int (*lof)(struct GB_STREAM *stream, long long *len);
        int (*handle)(struct GB_STREAM *stream);
        }
    GB_STREAM_DESC;

This describe is a function pointer table that must point at the implementation functions of a stream.

Each stream has a pointer to such a structure. See GB_STREAM for more details.

Function | What should be done | What should be returned
--- | --- | ---
`open` | Opens the stream. This function is never called directly by the interpreter, as you must open the file yourself, by instanciating the Stream Gambas object, and by filling the GB_STREAM structure appropriately. | `TRUE` if the stream cannot be opened, and `FALSE` if everything is OK.
`close` | Closes the stream. | `FALSE`.
`read` | Reads len bytes into the stream, and fills the buffer with them. | `TRUE` if there was an error, and `FALSE` if everything is OK. The `errno` code is used by the interpreter to choose the error message.
`write` | Writes the len bytes located at buffer to the stream. | `TRUE` if there was an error, and `FALSE` if everything is OK. The `errno` code is used by the interpreter to choose the error message.
`seek` | Seeks into the stream. pos is the position inside the stream. whence is one the following constants: `SEEK_SET`, to indicate that pos is an absolute position. `SEEK_CUR`, to indicate that pos is an offset to the current position. `SEEK_END`, to indicate that pos is an offset from the end of the stream. | `TRUE` if seeking is impossible, and `FALSE` if everything is OK.
`tell` | Returns the current stream position in pos. | `TRUE` if seeking is impossible, and `FALSE` if everything is OK.
`flush` | Flushes the stream. | `TRUE` if there was an error, and `FALSE` if everything is OK. If flushing has no sense for your stream, then you must return `FALSE`.
`eof` | Checks the end of the stream. | `TRUE` if the end of the stream is reached, `FALSE` otherwise.
`lof` | Returns in len the length of the stream. If this has no sense for your stream, and if the `handle` function returns a system file descriptor, you can let the interpreter returns the maximum number of bytes that can be read on the stream for you, by putting `0` in len. | `FALSE`.
`handle` | Returns the underlying system file descriptor. | The underlying system file descriptor.

### See also

Stream Management