open      Commandes Internes Tcl


NOM

open - Ouvre un canal basé fichier ou un pipeline

SYNTAXE


open fileName
open fileName access
open fileName access permissions

DESCRIPTION

Cette commande ouvre un fichier, un port série, ou un pipeline de commandes et retourne un identificateur de canal qui peut être employé dans les appels suivants des commandes comme read, puts, et close. Si le premier caractère de fileName n'est pas | alors la commande ouvre un fichier: fileName donne le nom du fichier à ouvrir, et il doit se conformer aux conventions décrite dans la page de manuel filename.
L'argument access, si présent, indique la façon de laquelle le fichier (ou commande pipeline) sera accédé. Dans la première forme access peut avoir quelconque des valeurs suivantes:
r
Ouvre le fichier pour la lecture seulement; le fichier doit déjà exister. C'est la valeur par défaut si access n'est pas spécifié.
r+
Ouvre le fichier pour la lecture et l'écriture; le fichier doit déjà exister.
w
Ouvre le fichier pour l'écriture seulement. Le tronque s'il existe. S'il n'existe pas, crée un nouveau fichier.
w+
Ouvre le fichier pour la lecture et l'écriture. Le tronque s'il existe. S'il n'existe pas, crée un nouveau fichier.
a
Ouvre le fichier pour l'écriture seulement. Si le fichier n'existe pas, crée un nouveau fichier vide. Positionne le curseur à la fin du fichier.
a+
Ouvre le fichier pour la lecture et l'écriture. Si le fichier n'existe pas, crée un nouveau fichier vide. Positionne le curseur à la fin du fichier.
Dans la seconde forme, access consiste en une liste de quelconque des flags suivants, chacun d'eux ayant la signification standard POSIX. Un des flags doit être soit RDONLY, WRONLY ou RDWR.
RDONLY
Ouvre le fichier pour la lecture seulement.
WRONLY
Ouvre le fichier pour l'écriture seulement.
RDWR
Ouvre le fichier en lecture et écriture.
APPEND
Positionne le curseur à la fin du fichier avant chaque écriture.
CREAT
Crée le fichier s'il n'existe pas déjà.
EXCL
Si CREAT est également spécifié, une erreur est générée si le fichier existe déjà.
NOCTTY
Si le fichier est un terminal, ce flag empêche le fichier de devenir le terminal de contrôle du processus.
NONBLOCK
Empêche le processus de bloquer pendant l'ouverture du fichier, et eventuellement pendant les opérations I/O suivantes. Le comportement exact de ce flag est système- et périphérique-dependant; son emploi est déconseillé (il vaut mieux utiliser la commande fconfigure pour mettre un fichier en mode non bloquant). Pour des détails se referer à la documentation de votre système sur le flag O_NONBLOCK de l'appel système open
TRUNC
Si le fichier existe il est tronqué à longueur zéro.
Si un nouveau fichier est créé en même temps qu'ouvert, permissions (un entier) est utilisé pour fixer les permissions pour le nouveau fichier en conjonction avec le masque de création fichier. Permissions est par défaut de 0666.

PIPELINES

Si le premier caractère de fileName est "|" alors les caractères restants de fileName sont traités comme une liste d'arguments qui decrivent un pipeline à appeler, dans le même style que les arguments à exec. Dans ce cas, l'identificateur de canal renvoyé par open peut être employé pour écrire à l'entrée du pipe ou lire de sa sortie, dépendant de la valeur de access. Si un accès écriture-seule est utilisé (ex. access est w), alors la sortie standard du pipeline est dirigée vers la sortie standard courante sauf si ecrasé par la commande. Si un accès lecture-seule est utilisé (ex. access est r), l'entrée standard du pipeline est prise de l'entrée standard courante sauf si ecrasé par la commande.

COMMUNICATIONS SERIE

Si fileName se refère à un port série, alors le port série spécifié est ouvert et initialisé d'une manière plateforme-dependante. Les valeurs acceptables de fileName pour ouvrir un port série sont décrites dans la section PROBLEMES DE PORTABILITE.

OPTIONS DE CONFIGURATION

La commande fconfigure peut être utilisée pour consulter et fixer les options de configuration suivantes pour ouvrir un port série:
-mode baud,parity,data,stop
Cette option est un ensemble de 4 valeurs séparées par des virgules: le baud rate, parité, nombre de bits de données, et nombre de bits stop pour ce port série. Le baud rate est un simple entier qui spécifie la vitesse de connection. Parity est une des lettres suivantes: n, o, e, m, s; signifiant respectivement les options de parité "aucune", "impaire", "paire", "marque", ou "espace". Data est le nombre de bits de données et sera un entier de 5 à 8, alors que stop est le nombre de bits de stop et sera l'entier 1 ou 2.
-pollinterval msec
Cette option, disponible seulement sous Windows pour les port séries, est utilisée pour fixer le temps maximum entre l'ecoute d'évènements fichier. Ceci affecte le intervalle de temps de vérification d'évènements par l'interpréteur Tcl (la plus petite valeur l'emporte toujours). Utilisez cette option seulement si vous voulez écouter le port série plus souvent que 10 msec (la valeur par défaut).
-lasterror
Cette option est disponible seulement sous Windows pour les port séries, et est en lecture seule (ne peut être que signalée). En cas d'une erreur de communication série, read ou puts retourne une erreur Tcl générale I/O fichier. fconfigure -lasterror peut être appelée pour obtenir une liste des details d'erreur (ex. FRAME RXOVER).

PROBLEMES DE PORTABILITE

Windows (toutes versions)
Les valeurs valides de fileName pour ouvrir un port série sont de la forme comX:, where X est un nombre, généralement de 1 à 4. Cette notation fonctionne seulement pour les port séries de 1 à 9, si le système en a plus que quatre. Une tentative d'ouvrir un port série qui n'existe pas ou a un nombre supérieur à 9 échouera. Une forme alternative d'ouvrir des port séries est d'utiliser le nom de fichier \\.\comX, où X est un nombre quelconque qui correspond à un port série; veuillez noter que cette méthode est considerablement plus lente sous Windows 95 et Windows 98.
Windows NT
Quand vous exécutez Tcl interactivement, il peut y avoir des interactions étranges entre la console réelle, si elle est présente, et une commande pipeline qui utilise l'entrée ou la sortie standard. Si une commande pipeline est ouverte pour la lecture, toutes les lignes entrées sur la console seront envoyées à la commande pipeline puis à l'evaluateur Tcl. Si une commande pipeline est ouverte pour l'écriture, les frappes de touches entrées sur la console ne seront pas visible jusqu'a ce que le le pipe soit fermé. Ce comportement se produit si la commande pipeline est une application 16-bit ou 32-bit. Ces problèmes se produisent seulement parce que à la fois Tcl et application enfant essayent d'acceder à la console en même temps. Si la commande pipeline est lancée à partir d'un script, Tcl n'accède pas à la console, ou si la commande pipeline n'utilise pas l'entrée ou la sortie, standard mais est redirigée à partir ou vers un fichier, alors les problèmes vus plus haut ne se produisent pas.
Windows 95
Une commande pipeline qui exécute une application DOS 16-bit ne peut pas être ouvert en lecture et écriture, car les applications DOS 16-bit qui recoivent l'entrée standard d'un pipe et envoient la sortie standard dans un pipe sont exécutées de manière synchrone. Les commande pipelines qui n'exécutent pas d'applications DOS 16-bit sont exécutées de manière asynchrone et peuvent être ouvertes en lecture et écriture.
Quand vous exécutez Tcl interactivement, il peut y avoir des interactions étranges entre la console réelle, si elle est présente, et une commande pipeline qui utilise l'entrée ou la sortie standard. Si une commande pipeline est ouvert pour la lecture à partir d'une application 32-bit, , les frappes de touches entrées sur la console seront envoyées à la commande pipeline et puis à l'evaluateur Tcl. Si une commande pipeline est ouvert pour l'écriture sur une application 32-bit, aucune sortie n'est visible sur la console jusqu'a ce que le le pipe soit fermé. Ces problèmes se produisent seulement parce que à la fois Tcl et application enfant essayent d'acceder à la console en même temps. Si la commande pipeline est lancée à partir d'un script, Tcl n'accède pas à la console, ou si la commande pipeline n'utilise pas l'entrée ou la sortie, standard mais est redirigée à partir ou vers un fichier, alors les problèmes vus plus haut ne se produisent pas. Que Tcl s'exécute interactivement ou non, si une commande pipeline est ouvert pour la lecture à partir une application 16-bit DOS, l'appel de open ne retourne pas jusqu'a ce que la fin-de-fichier avoir été transmise à la sortie standard du pipeline. Si un pipeline est ouvert pour l'écriture sur une application 16-bit DOS, aucune donnée ne sera envoyées à la sortie standard du pipeline jusqu'a ce que le pipe soit fermé. Ce problème se produit parce que les applications 16-bit DOS sont exécutées de manière synchrone, comme décrit plus haut.
Macintosh
Ouvrir un port série n'est pas encore implémenté sous Macintosh.
Ouvrir un pipeline n'est pas supporté sous Macintosh, car les applications ne supportent pas le concept d'entrée ou de sortie standard.
Unix
Les valeurs valides de fileName pour ouvrir un port série sont généralement de la forme /dev/ttyX, où X est a ou b, mais le nom de tout pseudo-fichier qui pointe vers un port série peut être employé.
Quand vous exécutez Tcl interactivement, il peut y avoir des interactions étranges entre la console réelle, si elle est présente, et une commande pipeline qui utilise l'entrée ou la sortie standard. Si une commande pipeline est ouvert pour la lecture, toutes lignes entrées sur la console seront envoyées au pipeline et puis à l'evaluateur Tcl. Ces problèmes se produisent seulement parce que à la fois Tcl et application enfant essayent d'acceder à la console en même temps. Si la commande pipeline lancée à partir d'un script, Tcl n'accède pas à la console, ou si la commande pipeline n'utilise pas l'entrée ou la sortie, standard mais est redirigée à partir ou vers un fichier, alors les problèmes vus plus haut ne se produisent pas. Voir la section PROBLEMES DE PORTABILITE de la commande exec pour une information supplémentaire non spécifique au pipelines au sujet de l'exécution d'applications sur les différentes plateformes

VOIR EGALEMENT

close(n), filename(n), gets(n), read(n), puts(n), exec(n)
Dernière révision: 7.6



Index  Précédent  Suivant