OPEN(2)            Manuel du programmeur Linux            OPEN(2)


NOM
       open, creat - Ouvrir ou créer éventuellement un fichier.

SYNOPSIS
       #include <sys/types.h>
       #include <sys/stat.h>
       #include <fcntl.h>

       int open(const char *pathname, int flags);
       int open(const char *pathname, int flags, mode_t mode);
       int creat(const char *pathname, mode_t mode);

DESCRIPTION
       open essaye d'ouvrir un fichier et retourne un descripteur
       de fichier (petit entier non négatif à utiliser avec read,
       write, etc...)

       flags  est  l'un des éléments O_RDONLY, O_WRONLY ou O_RDWR
       qui réclament respectivement  l'ouverture  du  fichier  en
       lecture seule, écriture seule, ou lecture/écriture.

       flags  peut  aussi  être  un  OU  binaire ( | ) avec un ou
       plusieurs des éléments suivants :

       O_CREAT
              Créer le fichier s'il n'existe pas.

       O_EXCL En conjonction avec O_CREAT, déclenchera une erreur
              si  le fichier existe, et open échouera.  O_EXCL ne
              fonctionne pas sur les systèmes  de  fichiers  NFS.
              Les  programmes  qui  ont besoin de cette fonction­
              nalité pour verrouiller des tâches risquent de ren­
              contrer  une concurrence critique (race condition).
              La solution consiste à créer un fichier unique  sur
              le  même  système  de fichiers (par exemple avec le
              pid et le nom de  l'hôte),  utiliser  link(2)  pour
              créer  un  lien  sur  un fichier de verrouillage et
              d'utiliser  stat(2)  sur  ce  fichier  unique  pour
              vérifier  si  le nombre de liens a augmenté jusqu'à
              2. Ne pas utiliser la valeur de retour de link().

       O_NOCTTY
              Si pathname correspond à un périphérique de  termi­
              nal  -- voir tty(4) --, il ne deviendra pas le ter­
              minal contrôlant  le  processus  même  si  celui-ci
              n'est attaché à aucun autre terminal.

       O_TRUNC
              Si le fichier existe il sera tronqué.

       O_APPEND
              Le  fichier  est  ouvert en mode "ajout". Initiale­
              ment, et  avant  chaque  write,  la  tête  de  lec­
              ture/écriture  est placée à la fin du fichier comme



Linux                      18 Mai 1999                          1





OPEN(2)            Manuel du programmeur Linux            OPEN(2)


              avec lseek.  Il  y  a  un  risque  d'endommager  le
              fichier   lorsque  O_APPEND  est  utilisé,  sur  un
              système de fichiers  NFS,  si  plusieurs  processus
              tentent d'ajouter des données simultanément au même
              fichier.  Ceci est dû au fait que NFS  ne  supporte
              pas l'opération d'ajout de données dans un fichier,
              aussi le noyau client est  obligé  de  la  simuler,
              avec un risque de concurrence des tâches.

       O_NONBLOCK ou O_NDELAY
              Le fichier est ouvert en mode "non-bloquant". Ni la
              fonction open ni aucune autre opération  ultérieure
              sur ce fichier ne laissera le processus appelant en
              attente.

       O_SYNC Le fichier est  ouvert  en  écriture  synchronisée.
              Chaque  appel  à  write  sur le fichier bloquera le
              processus appelant jusqu'à ce que les données aient
              été  écrites  physiquement  sur le support matériel
              (voir la section RESTRICTIONS plus bas).

       O_NOFOLLOW
              Si pathname est  un  lien  symbolique,  l'ouverture
              échoue.  Ceci  est  une  extension FreeBSD, qui fut
              ajoutée à Linux dans la version 2.1.126.  Les liens
              symboliques se trouvant dans le chemin d'accès pro­
              prement dit seront suivis normalement. Les  en-tête
              de glibc 2.0.100 et suivant contiennent une défini­
              tion de cet attribut.
               Les noyaux antérieurs au 2.1.126 ignorent  simple­
              ment cet attribut si vous l'utilisez.

       O_DIRECTORY
              Si  pathname  n'est  pas un répertoire, l'ouverture
              échoue. Cet attribut est spécifique à Linux et  fut
              ajouté  dans  la  version  2.1.126  du  noyau, pour
              éviter  des  problèmes  de   dysfonctionnement   si
              opendir(3)   est   invoqué   sur  une  FIFO  ou  un
              périphérique de  bande.  Cet  attribut  ne  devrait
              jamais être utilisé ailleurs que dans l'implémenta­
              tion de opendir.

       O_LARGEFILE
              Sur  les  systèmes  32  bits  qui  supportent   les
              Systèmes  de  Fichiers Larges, autoriser quand même
              l'ouverture des fichiers dont la taille ne peut pas
              être  représentée  sur  31  bits.  Le  noyau  Linux
              n'offre pas encore de support pour cette option (du
              moins  jusqu'au  2.1.130),  mais  la  définition de
              l'attribut est présente et les interfaces LFS  sont
              présentes dans les versions de test de glibc 2.1.

       Certains de ces attributs optionnels peuvent être modifiés
       par la suite avec la fonction fcntl.



Linux                      18 Mai 1999                          2





OPEN(2)            Manuel du programmeur Linux            OPEN(2)


       mode indique les permissions  à  utiliser  si  un  nouveau
       fichier  est créé.  Cette valeur est modifiée par le umask
       du processus : la véritable valeur utilisée  est  (mode  &
       ~umask).

       Les constantes symboliques suivantes sont disponibles pour
       mode:

       S_IRWXU
              00700 L'utilisateur (propriétaire du fichier) a les
              autorisations de lecture, écriture, exécution.

       S_IRUSR (S_IREAD)
              00400 L'utilisateur a l'autorisation de lecture.

       S_IWUSR (S_IWRITE)
              00200 L'utilisateur a l'autorisation d'écriture.

       S_IXUSR (S_IEXEC)
              00100 L'utilisateur a l'autorisation d'exécution.

       S_IRWXG
              00070  Le  groupe  a  les autorisations de lecture,
              écriture, exécution.

       S_IRGRP
              00040 Le groupe a l'autorisation de lecture.

       S_IWGRP
              00020 Le groupe a l'autorisation d'écriture.

       S_IXGRP
              00010 Le groupe a l'autorisation d'exécution.

       S_IRWXO
              00007 Tout le monde a les autorisations de lecture,
              écriture, exécution.

       S_IROTH
              00004 Tout le monde a l'autorisation de lecture.

       S_IWOTH
              00002 Tout le monde a l'autorisation d'écriture.

       S_IXOTH
              00001 Tout le monde a l'autorisation d'exécution.

       Le  mode  devrait  toujours être indiqué quand O_CREAT est
       dans les attributs flags, (il est ignoré dans  les  autres
       cas).

       creat  est  équivalent à open avec l'attribut flags égal à
       O_CREAT | O_WRONLY | O_TRUNC.




Linux                      18 Mai 1999                          3





OPEN(2)            Manuel du programmeur Linux            OPEN(2)


VALEUR RENVOYÉE
       open et creat renvoient le nouveau descripteur de  fichier
       s'ils  réussissent, ou -1 s'ils échouent, auquel cas errno
       contient le code d'erreur.  Notez que open peut ouvrir des
       fichiers spéciaux mais creat ne peut pas en créer, il faut
       utiliser mknod(2) à la place.

       Sur les systèmes de fichiers  NFS,  où  la  correspondance
       d'UID  est  activée,  open peut renvoyer un descripteur de
       fichier alors qu'une  requête  read(2)  par  exemple  sera
       refusée  avec le code d'erreur EACCES.  En effet, c'est le
       client qui effectué open en  vérifiant  les  autorisations
       d'accès,  mais la correspondance d'UID est calculée par le
       serveur au moment des requêtes de lecture ou d'écriture.

ERREURS
       EEXIST pathname existe déjà et O_CREAT et O_EXCL  ont  été
              indiqués.

       EISDIR On a demandé une écriture alors que pathname corre­
              spond à un répertoire.

       EACCES L'accès demandé au fichier est  interdit,  ou  l'un
              des répertoires du chemin pathname ne permet pas de
              consultation, ou le fichier n'existe  pas  mais  le
              répertoire parent ne permet pas l'écriture.

       ENAMETOOLONG
              pathname est trop long.

       ENOENT Un  répertoire  du chemin d'accès pathname n'existe
              pas où est un lien symbolique pointant nulle  part.

       ENOTDIR
              Un  élément du chemin d'acces pathname n'est pas un
              répertoire, ou l'attribut O_DIRECTORY  est  utilisé
              et pathname n'est pas un répertoire.

       ENXIO  O_NONBLOCK  |  O_WRONLY est indiqué, le fichier est
              une FIFO et le processus n'a pas de fichier  ouvert
              en  lecture.  Ou le fichier est un noeud spécial et
              il n'y a pas de périphérique correspondant.

       ENODEV pathname correspond à un fichier spécial et il  n'y
              a pas de périphérique correspondant.

       EROFS  Un accès en écriture est demandé alors que pathname
              réside sur un système de fichiers en lecture seule.

       ETXTBSY
              On a demandé une écriture alors que pathname corre­
              spond à un fichier exécutable actuellement utilisé.

       EFAULT pathname  pointe  en dehors de l'espace d'adressage



Linux                      18 Mai 1999                          4





OPEN(2)            Manuel du programmeur Linux            OPEN(2)


              accessible

       ELOOP  pathname  contient  une  référence  circulaire   (à
              travers un lien symbolique), ou l'attribut O_NOFOL­
              LOW est indiqué et pathname est un lien symbolique.

       ENOSPC pathname  devrait  etre  créé  mais le périphérique
              concerné n'a plus assez de place  pour  un  nouveau
              fichier.

       ENOMEM Pas assez de mémoire pour le noyau

       EMFILE Le  processus  a  déjà  ouvert le nombre maximal de
              fichiers.

       ENFILE La limite du nombre total de fichiers  ouverts  sur
              le système est atteinte.

CONFORMITÉ
       SVr4, SVID, POSIX, X/OPEN, BSD 4.3

RESTRICTIONS
       Plusieurs  problèmes se posent avec le protocole NFS, con­
       cernant entre autres O_SYNC, et O_NDELAY .

       POSIX fournit trois variantes différentes des entrées/sor­
       ties  synchronisées  correspondant  aux  attributs O_SYNC,
       O_DSYNC et O_RSYNC.   Actuellement  (2.1.130)  elles  sont
       toutes équivalentes sous Linux.


VOIR AUSSI
       read(2),    write(2),   fcntl(2),   close(2),   unlink(2),
       mknod(2),   stat(2),   umask(2),   mount(2),    socket(2),
       socket(2), fopen(3), link(2).


TRADUCTION
       Christophe Blaess, 1997.


















Linux                      18 Mai 1999                          5