Openio permet d'ouvrir et de fermer un fichier séquentiel en lecture et en écriture.
Openio [ exp_nomfic [, exp_depl ] ] [ Using abrev ]
Elément | Description | Restrictions |
exp_nomfic | Expression de type Char dont le résultat est le chemin d'un fichier (Unix ou MS-DOS) | Aucune. |
exp_depl | Expression numérique de la valeur initiale du déplacement (seek). | 0 <= exp_depl <= taille du fichier. |
abrev | Abréviation désignant le fichier ouvert. | Aucune. |
# Ouverture d'un fichier avec saut des 10 premiers caractères
Openiofilpath('tmp','rdfile',''), 10
# Fermeture du dernier fichier ouvert pour lecture et écriture
Openio
# On veut lire sur l'entrée standard (clavier)
# et écrire sur la sortie standard (écran)
Openio"*"
# Ouverture s'un fichier se trouvant sur la machine "distrib"
Openio"distrib@"+[L]NOMFIC
# Ouverture du fichier X3.ini se trouvant sur le client
Openio"#@C:\X3\X3.ini"
# Ouverture de deux fichiers
Openiofilpath('tmp','rdfile1','') Using [YYY]
Openiofilpath('tmp','rdfile2','') Using [ZZZ]
# Fermeture des deux fichiers précédemment ouverts
Openio Using [YYY]
Openio Using [ZZZ]
Openio avec exp_nomfic permet d'ouvrir un fichier pour lecture et écriture par Rdseq, Wrseq, Putseq et Getseq.
Openio sans exp_nomfic permet de fermer ce fichier.
Par convention, le poste client est désigné par le serveur #.
La valeur donnée en 2ème paramètre permet de débuter les lectures/écritures à une position donnée du fichier. En son absence, la lecture/écriture débutera en début de fichier. Dans tous les cas, l'ordre Seek permet de se déplacer pendant la lecture, et les fonctions adxseek(0), adxseek(1) ou adxseek(abrev) permettent de connaître la position dans le fichier. Bien évidemment, aucune troncature n'est faite sur le fichier; par contre celui-ci est agrandi si l'on écrit au delà de la fin du fichier. Si l'on fait un Seek au delà du fichier, puis l'on écrit, la portion du fichier non écrite sera remplie de caractères nuls.
La clause Using permet d'attribuer une abréviation à un fichier séquentiel ouvert. Par conséquent, il est possible d'ouvrir jusqu'à 16 fichiers séquentiels simultanément sous réserve de la valeur du paramètre adxmso.
Fichier sans abréviation :
Fichier avec abréviation :
L'ouverture par Openio faite sur un fichier inexistant ne crée pas de fichier (contrairement à Openo qui le crée si on tronque ou si on écrit en fin de fichier), mais provoque l'erreur PAFIC.
adxseek(0) est utilisé pour les positions de lecture et adxseek(1) pour les positions d'écriture. Lorsque le fichier a été ouvert par Openio, ces deux valeurs sont toujours identiques.
Les écritures dans un fichier étant bufferisées, elles ne sont effectives qu'après la fermeture de ce fichier par une des instructions Openo ou Openio. Ceci implique qu'avant cette opération, la taille du fichier sur disque peut être inchangée après des Putseq/Wrseq. On peut utiliser l'ordre Seek 0 pour vider les tampons d'écriture.
Il importe de prendre garde aux accès concurrents à un fichier ouvert par Openio. Pour gérer les problèmes d'accès à un même fichier, il est conseiller de verrouiller un symbole (voir Lock). Il faut garder à l'esprit que les transactions ne s'appliquent pas à la mise à jour de fichiers séquentiels.
Erreur | Description |
ERMODE (10) | exp_nomfic n'est pas de type Char ou exp_depl n'est pas de type numérique. |
ERDOM (50) | exp_depl < 0. |
ERACCE (27) | Accès impossible (permission refusée). |
PAFIC (20) | Fichier (ou répertoire du chemin d'accès) inexistant. |
ERSEEK (57) | Le fichier est l'entrée/sortie standard (exp_nomfic='*') et exp_depl <> 0. |
ERCHAN (60) | Pas assez de canaux disponibles pour l'ouverture (qui en nécessite 2). |
ERSYST (25) | Erreur système (problème de connexion sur la machine distante). |