====== open ======
Ouvre un canal basé sur un 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 [[:tcl:read]], [[:tcl:puts]], et [[:tcl: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 éventuellement pendant les opérations I/O suivantes. Le comportement exact de ce flag est système- et périphérique-dépendant; 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 référer à 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 décrivent 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 écrasé 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 écrasé par la commande.
===== Exemples =====
===== Voir aussi =====
{{tag>tcl}}