Openo permet d'ouvrir et de fermer un fichier séquentiel en écriture seulement.
Openo [ 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 pour écriture avec troncature préliminaire
Openofilpath('tmp','rdfile',''), 1024
# Fermeture du dernier fichier ouvert pour écriture
Openo
# On veut écrire sur la sortie standard (écran)
Openo "*"
# Création d'un fichier rempli d'octets nuls !
NOMFIC = '/tmp/octets.nuls' : TAILLE = 100000
OpenoNOMFIC :# Ouverture+création si inexistant,troncature
Openo NOMFIC, TAILLE :# Réouverture en l'amenant à la bonne taille
# Ouverture d'un fichier se trouvant sur la machine "distrib"
Openo"distrib@"+[L]NOMFIC
# Ouverture du fichier X3.ini se trouvant sur le client
Openo"#@C:\X3\X3.ini"
# Ouverture de deux fichiers
Openofilpath('tmp','rdfile1','') Using [YYY]
Openo filpath('tmp','rdfile2','') Using [ZZZ]
# Fermeture des deux fichiers précédemment ouvert
Openo Using [YYY]
Openo Using [ZZZ]
Openo avec exp_nomfic permet d'ouvrir un fichier pour écriture par Wrseq et Putseq.
Openo sans exp_nomfic permet de fermer le fichier.
Par convention, le poste client est désigné par le serveur #.
La valeur donnée en 2ème paramètre permet de tronquer le fichier au préalable à une longueur donnée avant de commencer les écritures, c'est-à-dire :
Lorsque l'ouverture est faite, la fonction adxseek(1) ou adxseek(abrev) contient la position courante du pointeur, c'est-à-dire ici la taille actuelle du fichier éventuellement tronqué.
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 :
Dans tous les cas, Openo conserve le fichier avec tous ses liens s'il y en a (il ne fait jamais d'effacement du fichier, toujours des troncatures). Pour supprimer les liens du fichier s'il existe, il faut l'effacer ou le recopier au préalable (par exemple grâce à l'instruction System).
Si aucun paramètre de troncature n'est donné, Openo ouvre le fichier en ajout (exp_depl est négatif par défaut).
Openo crée un fichier s'il n'existe pas, seulement si celui-ci a été ouvert pour troncature (exp_depl = 0) ou pour ajout en fin de fichier (exp_depl < 0). Dans les autres cas, l'erreur PAFIC est provoquée.
Pour ne pas avoir à effacer le fichier à tronquer, Openo procède en recopiant la partie du fichier à conserver dans un fichier temporaire, puis il tronque le fichier à la longueur nulle et recopie le fichier temporaire dessus. L'Openo peut donc être long en exécution (il est ininterruptible par interruption soft). De plus, il importe de vérifier qu'il y a assez de place disque pour recopier la partie du fichier à tronquer. Dans le cas contraire, une erreur 'Plus de place disque' surviendrait. De même, l'ouverture d'un fichier pour l'amener à une taille supérieure à sa taille d'origine peut être longue et source d'erreurs s'il n'y a plus de place disque, car Adonix écrit des octets nuls jusqu'à parvenir à la bonne taille.
Il importe de prendre garde aux accès concurrents à un fichier ouvert par Openo. Pour gérer les problèmes d'accès à un même fichier par une application Adonix, il est conseillé de verrouiller un même symbole (voir Lock). Il faut être conscient du fait que les transactions ne gèrent pas les mises à jour de fichier séquentiels.
Les écritures dans un fichier étant bufferisées, elles ne sont effectives qu'après la fermeture de ce fichier par l'Openo final. Ceci implique qu'avant cette opération, la taille du fichier sur disque peut être inchangée après des Wrseq/Putseq.
Erreur | Description |
ERMODE (10) | exp_nomfic n'est pas de type Char ou exp_depl n'est pas de type numérique. |
ERDOM (50) | Le 2ème argument n'est pas entier. |
ERMDISK (44) | Plus de place sur disque. |
ERACCE (27) | Accès impossible (permission refusée). |
PAFIC (20) | Fichier (ou répertoire du chemin d'accès) inexistant. |
ERULIM (65) | Taille maxi autorisée pour un fichier atteinte. |
ERCHAN (60) | Pas assez de canaux disponibles pour l'ouverture (qui en nécessite 1). |
ERSYST (25) | Erreur système (problème à la connexion sur machine distante). |