L4G >  Openo  

Afficher tout Masquer tout

Openo permet d'ouvrir et de fermer un fichier séquentiel en écriture seulement.

 

Syntaxe

   Openo [ exp_nomfic [, exp_depl ] ]  [ Using abrev ]

 

Paramètres

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.

 

Exemples

   # 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]

 

Description

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 :

  • si la valeur est nulle, le fichier est ramené à une taille nulle;
  • si la valeur est positive et inférieure à la taille du fichier, le fichier est tronqué à la valeur donnée; on écrira ensuite en fin de fichier.
  • si la valeur est négative (par convention) ou positive et supérieure ou égale à la taille du fichier, on ouvre le fichier pour y ajouter des informations, en rajoutant au besoin des octets nuls pour l'amener à une taille correspondant à la valeur (le fichier ne peut qu'augmenter de taille).

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 :

  • La fonction adxseek(1) contient la position courante du pointeur.
  • Il ne peut y avoir qu'un seul fichier séquentiel ouvert par Openo ou Openio, à un instant donné. L'ouverture en écriture d'un fichier aura pour action de refermer un fichier qui aurait été précédemment ouvert par Openo ou Openio.
  • Openo utilisé sans paramètre permet de fermer le fichier précédemment ouvert ou de faire cesser l'affectation du canal de sortie à l'écran.

Fichier avec abréviation :

  • La fonction adxseek(abrev) contient la position courante du pointeur.
  • On ne peut pas avoir plusieurs fichiers ouverts sous la même abréviation à un instant donné. L'ouverture d'un fichier sous une  même abréviation ( y compris dans un sous-programme) aura pour effet de refermer le fichier ouvert précédemment.
  • Openo, utilisé avec la clause using abrev uniquement, permet de fermer le fichier précédemment ouvert sous cette abréviation.

 

Remarques

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.

Particularités Web

En web, il n'est pas possible d'ouvrir un fichier sur le poste client.

Erreurs associées

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).

 

Mots-clés associés

OPENI - OPENIO - SEEK - GETSEQ - PUTSEQ - RDSEQ - WRSEQ - IOMODE - ADXIFS - ADXIRS - ADXIUM - ADXSEEK - ADXMAC - ADXMSO