Documentation de Gambas - /dev/api/name/gb_stream_desc

/dev/api/name/gb_stream_desc

# GB_STREAM_DESC

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;

Ceci décrit une table de pointeurs de fonctions qui doit pointer vers les fonctions d’implémentation d’un flux.

Chaque flux possède un pointeur vers une telle structure. Voir GB_STREAM pour plus de détails.

Fonction | Ce qui doit être fait | Ce qui doit être retourné
--- | --- | ---
`open` | Ouvre le flux. Cette fonction n’est jamais appelée directement par l’interpréteur, vous devez ouvrir le fichier vous-même, en instanciant l’objet Gambas Stream, et en renseignant la structure GB_STREAM de manière appropriée. | `TRUE` signifie le flux ne peut pas être ouvert, et `FALSE` signifie tout est OK.
`close` | Ferme le flux. | `FALSE`.
`read` | Lit len octets depuis le flux, et remplit le tampon avec eux. | `TRUE` signale une erreur, et `FALSE` signifie tout est OK. Le code `errno` est employé par l’interpréteur pour choisir le message d’ erreur.
`write` | Ecrit les len octets situés dans le tampon _ vers le flux. | `TRUE` signale une erreur, et `FALSE` signifie tout est OK. Le code `errno` est employé par l’interpréteur pour choisir le message d’ erreur.

`seek`

Saut à l’intérieur d’un flux.

- pos est la position dans le flux.

- whence est l’une des constantes suivante :

  - `SEEK_SET`, indique que pos est une position absolue.

  - `SEEK_CUR`, indique pos est un décalage depuis la position courante.

  - `SEEK_END`, indique pos est un décalage depuis la fin du flux.

`TRUE` si le saut est impossible, `FALSE` signifie tout est OK.

`tell` | Retourne dans pos la position courante à l’intérieur du flux. | `TRUE` si le saut est impossible, `FALSE` signifie tout est OK.
`flush` | Vide le flux. | `TRUE` s’il y a eu une erreur, `FALSE` signifie tout est OK. Si le vidage n’a pas de sens pour votre flux, alors vous devez retourner `FALSE`.
`eof` | Test la fin de flux. | `TRUE` si la fin de flux est atteinte, `FALSE` sinon.
`lof` | Retourne dans len la longueur du flux. Si ça n’a pas de sens pour votre flux, et si la fonction `handle` retourne un descripteur de fichier du système, vous pouvez vous faire retourner par l’interpréteur le nombre maximum d’octets qui peut être lu sur le flux , en mettant `0` dans len. | `FALSE`.
`handle` | Retourne le descripteur de fichier sous-jacent du système. | Le descripteur de fichier sous-jacent du système.

### Voir aussi

- /wiki/api/cat/stream