articles/dicorebol-fr/read-io.txt · Dernière modification: 07/05/2005 00:22

EN: rebol.com - rebol.org - rebol.net -
FR: Rebol Documentation Project - forum RebelBB - rebol-france.org - forum codeur -

 

Read-IO - Détail de la fonction

En résumé :

Lecture bas-niveau d’un port.

Utilisation :

read-io port buffer length

Arguments :

port - Port déjà ouvert à lire. (type: port!)

buffer - Tampon où ajouter les données. (type: any-string!)

length - Nombre maximum de caractères à lire. (type: number!)

Description :

Cette fonction fournit une méthode bas-niveau pour lire des données à partir d’un port. La plupart du temps, cette fonction ne devrait pas être utilisée, la fonction COPY étant la méthode appropriée pour lire des données d’un port. Cependant, dans certaines situations, utiliser READ-IO peut être nécessaire.

La différence principale entre READ-IO et COPY est que READ-IO nécessite un tampon de taille fixe et une longueur maximale de transfert en arguments. Comme avec la fonction READ du language C, les octets sont transférés vers le tampon jusqu’à concurrence de la longueur maximale spécifée. La longueur du transfert est retournée en résultat; elle peut être zéro (si rien n’est transféré,) ou même négative dans le cas de certaines erreurs.

Voici un exemple simple d’utilisation de READ-IO sur un fichier (Notez à nouveau: c’est une méthode d’E/S bas-niveau; vous devriez normalement utiliser les fonctions sur les séries comme COPY, INSERT, NEXT, etc. pour lire et écrire dans les ports d’E/S.)

    write %testfile "testing"
    buffer: make string! 100
    port: open/direct %testfile
    read-io port buffer 4
    close port
    probe buffer
    "test"

Si la longueur du transfert est plus grande que la taille du tampon fourni, elle sera limitée à la taille du tampon, comme si cette longueur là avait été fournie en argument (ainsi aucune donnée ne sera perdue.)

Le code ci-dessous fournit un excellent exemple de l’utilisation de READ-IO pour lire des données CGI (serveur Web):

    read-cgi: func [
        "Read CGI form data from GET or POST."
        /local data buf
    ][
        if system/options/cgi/request-method = "POST" [
            data: make string! 1020
            buffer: make string! 16380
            while [positive? read-io system/ports/input buffer 16380][
                append data buffer
                clear buffer
            ]
            return data
        ]
        if system/options/cgi/request-method = "GET" [
            return system/options/cgi/query-string
        ]
        test-data ; if in test mode
    ]

Dans cet exemple, si la requête CGI est de type POST, alors les données seront transmises sous la forme d’un flux binaire vers le port d’entrée REBOL. Le code montre comment le port est lu jusqu’à ce que toutes les données aient été collectées (tant que la valeur de retour est positive.) Notez que le BUFFER est de taille fixe; lorsqu’il est lu, les données sont accumulées dans le tampon auto-extensible DATA.

Fonction en relation :

write-io - Ecriture bas-niveau dans un port.

Version anglaise officielle :

 
  articles/dicorebol-fr/read-io.txt · Dernière modification: 07/05/2005 00:22
 
Fil RSS: Recent changes RSS feed
Valid XHTML 1.0 Valid CSS Powered by PHP Driven by DokuWiki
Hébergement par Spinodo