Se connecter
Se connecter
Inscription
Mot de passe perdu
Connexion:
[Actualités]
Nvidia prévient d'une pénurie de GPU ce trimestre, avec une reprise début 2025
[Actualités]
Les Technos #469 : Un jour sans fin
[Actualités]
Test Farming Simulator 25 (PS5) - Des innovations intéressantes mais des perfor...
[Actualités]
Qualcomm souhaite réduire davantage les prix des PC Windows basés sur ARM
[Actualités]
Finalement, Google préparerait une nouvelle tablette mais la Pixel Tablet 2 ser...
[Actualités]
Windows 10 version 22H2 : erreur de mise à jour et de désinstallation
[Actualités]
OpenAI prépare désormais son propre navigateur
[Actualités]
WhatsApp bat Telegram : les transcriptions des messages vocaux arrivent pour tou...
[Actualités]
Unreal et Unreal Tournament désormais gratuits sur Internet Archive
[Actualités]
Windows 10 : Microsoft affiche des publicités en plein écran pour les PC équi...
[Articles]
Dungeons 4 - Nintendo Switch Edition
[Articles]
The Bridge Curse 2 : The Extrication
[Articles]
Farmagia
[Articles]
I*CHU: Chibi Edition
[Articles]
Farming Simulator 25
[Articles]
Goblin Slayer -Another Adventurer- Nightmare Feast
[Articles]
Deel lance des programmes en marque blanche et pour les revendeurs pour plus de ...
[Articles]
ESET Research : WolfsBane, nouvelle porte dérobée de cyber-espionnage Linux cr...
[Articles]
Devoteam présente son nouveau plan stratégique « AMPLIFY » avec un fort acce...
[Articles]
LEGO Horizon Adventures
Actualités
Lettre d'information
Proposer une actualité
Archives
Actualités
Articles
Programmation
Press Release
Matériel
Logiciels
Livres
Interviews
Derniers commentaires
Jeux Vidéos
XBox One
XBox 360
Wii U
PSP
PS4
PS3
PC
DS
GameCube
3DS
Forum
Derniers messages
Informatique
Fun
Divers
Logithèque
Blogs
Divers
A Propos
Annonceurs
Contact
Recherche
RSS
Editer un article
Titre
Mots Clés
Texte
[size=18] [b]Nom[/b] [/size] open, creat - Ouvrir ou créer éventuellement un fichier. [size=18] [b]Résumé[/b] [/size] .nf [b]#include
[/b] [b]#include
[/b] [b]#include
[/b] [b][i]int open(const char * pathname , int flags );[/i][/b] [b][i]int open(const char * pathname , int flags , mode_t mode );[/i][/b] [b][i]int creat(const char * pathname , mode_t mode );[/i][/b] .fi [size=18] [b]Description[/b] [/size] L'appel-système [b]open()[/b] sert à convertir un chemin d'accès en descripteur de fichier (un petit entier non négatif utilisable pour les opérations d'entrées/sorties ultérieures telles [b]read , write , etc.).[/b] Lorsque l'appel-système réussit, le descripteur renvoyé sera le plus petit descripteur de fichier non encore ouvert pour le processus. Cet appel crée un nouveau descripteur, non-partagé avec les autres processus. Toutefois le partage de fichiers ouverts peut se produire avec l'appel-système [b]fork (2)).[/b] Le nouveau descripteur de fichier est configuré pour rester ouvert au travers des fonctions exec (voir [b]fntl (2)).[/b] Le pointeur de position dans le fichier est placée à son début. Le paramètre [i]flags[/i] est l'un des éléments [b]O_RDONLY , O_WRONLY ou O_RDWR[/b] qui réclament respectivement l'ouverture du fichier en lecture seule, écriture seule, ou lecture/écriture. À cette valeur peut être ajouté un ou plusieurs attributs avec un [i]OU binaire :[/i] [b]O_CREAT[/b] [table][row][col] [/col][col]Créer le fichier s'il n'existe pas. Le possesseur (UID) du fichier est renseigné avec l'UID effectif du processus. Le groupe propriétaire (GID) du fichier est le GID effectif du processus ou le GID du répertoire parent (ceci dépend du système de fichiers, des options de montage, du mode du répertoire parent, etc.) Voir par exemple les options de montage [i]bsdgroups[/i] et [i]sysvgroups[/i] du système de fichiers ext2, décrites dans la page [b]mount (8)).[/b][/col][/row][/table] [b]O_EXCL[/b] [table][row][col] [/col][col]En conjonction avec [b]O_CREAT ,[/b] déclenchera une erreur si le fichier existe, et [b]open[/b] échouera. On considère qu'un lien symbolique, quelque soit l'endroit où il pointe. [b]O_EXCL[/b] ne fonctionne pas sur les systèmes de fichiers NFS. Les programmes qui ont besoin de cette fonctionnalité pour verrouiller des tâches risquent de rencontrer 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 [b]link (2)[/b] pour créer un lien sur un fichier de verrouillage et d'utiliser [b]stat (2)[/b] sur ce fichier unique pour vérifier si le nombre de liens a augmenté jusqu'à 2. Ne pas utiliser la valeur de retour de [b]link()[/b].[/col][/row][/table] [b]O_NOCTTY[/b] [table][row][col] [/col][col]Si [i]pathname[/i] correspond à un périphérique de terminal (em voir [b]tty (4)[/b] (em, il ne deviendra pas le terminal contrôlant le processus même si celui-ci n'est attaché à aucun autre terminal.[/col][/row][/table] [b]O_TRUNC[/b] [table][row][col] [/col][col]Si le fichier existe, est un fichier régulier, et est ouvert en écriture (O_RDWR ou O_WRONLY), il sera tronqué à une longueur nulle. Si le fichier est une FIFO ou un périphérique terminal, l'attribut O_TRUNC est ignoré. Sinon, le comportement de O_TRUNC n'est pas précisé. Sur de nombreuses versions de Linux, il sera ignoré ; sur d'autres versions il déclenchera une erreur).[/col][/row][/table] [b]O_APPEND[/b] [table][row][col] [/col][col]Le fichier est ouvert en mode "ajout". Initialement, et avant chaque [b]write ,[/b] la tête de lecture/écriture est placée à la fin du fichier comme avec [b]lseek .[/b] Il y a un risque d'endommager le fichier lorsque [b]O_APPEND[/b] 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.[/col][/row][/table] [b]O_NONBLOCK ou O_NDELAY[/b] [table][row][col] [/col][col]Le fichier est ouvert en mode "non-bloquant". Ni la fonction [b]open[/b] ni aucune autre opération ultérieure sur ce fichier ne laissera le processus appelant en attente. Pour la manipulation des FIFO (tubes nommés), voir également [b]fifo (4).[/b] Ce mode n'a pas nécessairement d'effet sur autre chose que les FIFOs.[/col][/row][/table] [b]O_SYNC[/b] [table][row][col] [/col][col]Le fichier est ouvert en écriture synchronisée. Chaque appel à [b]write [/b] 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).[/col][/row][/table] [b]O_NOFOLLOW[/b] [table][row][col] [/col][col]Si [i]pathname[/i] 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 proprement dit seront suivis normalement. Les en-tête de glibc 2.0.100 et suivant contiennent une définition de cet attribut. [i][/i] Les noyaux antérieurs au 2.1.126 ignorent simplement cet attribut si vous l'utilisez.[/col][/row][/table] [b]O_DIRECTORY[/b] [table][row][col] [/col][col]Si [i]pathname[/i] 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 [i]opendir[/i](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émentation de [b]opendir[/b].[/col][/row][/table] [b]O_DIRECT[/b] [table][row][col] [/col][col]Essayer de minimiser les effets du cache d'entrée/sortie sur ce fichier. Ceci dégradera en général les performances, mais est utilise dans des situations spéciales, lorsque les applications ont leur propres caches. Les entrées/sorties dans le fichier se font directement depuis l'espace utilisateur, elles sont synchrones (à la fin de [b]read (2)[/b] ou [b]write (2),[/b] les donnée ont obligatoirement été transférées). La taille des transferts, l'alignement du buffer et la position dans le fichier doivent être des multiples de la taille de blocs logiques du système de fichiers. [b][/b] Une interface à la sémantique similaire pour les périphériques de type bloc est décrite à la page [b]raw (8).[/b][/col][/row][/table] [b]O_ASYNC[/b] [table][row][col] [/col][col]Déclencher un signal (SIGIO par défaut, mais peut être changé via [b]fcntl (2))[/b] lorsque la lecture ou l'écriture devienne possible sur ce descripteur. Ceci n'est possible que pour les terminaux, pseudo-terminaux et sockets. Voir [b]fcntl (2)[/b] pour plus de détails.[/col][/row][/table] [b]O_LARGEFILE[/b] [table][row][col] [/col][col]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.[/col][/row][/table] Certains de ces attributs optionnels peuvent être modifiés par la suite avec la fonction [b]fcntl .[/b] L'argument [i]mode[/i] indique les permissions à utiliser si un nouveau fichier est créé. Cette valeur est modifiée par le [b]umask[/b] du processus : la véritable valeur utilisée est [b](mode & ~umask) .[/b] Notez que ce mode ne s'applique qu'aux accès ultérieurs du fichier nouvellement créé. L'appel [b]open[/b] qui crée un fichier dont le mode est en lecture seule fournira quand même un descripteur de fichier en lecture et écriture. Les constantes symboliques suivantes sont disponibles pour [b]mode :[/b] [b]S_IRWXU[/b] [table][row][col] [/col][col]00700 L'utilisateur (propriétaire du fichier) a les autorisations de lecture, écriture, exécution.[/col][/row][/table] [b]S_IRUSR (S_IREAD)[/b] [table][row][col] [/col][col]00400 L'utilisateur a l'autorisation de lecture.[/col][/row][/table] [b]S_IWUSR (S_IWRITE)[/b] [table][row][col] [/col][col]00200 L'utilisateur a l'autorisation d'écriture.[/col][/row][/table] [b]S_IXUSR (S_IEXEC)[/b] [table][row][col] [/col][col]00100 L'utilisateur a l'autorisation d'exécution.[/col][/row][/table] [b]S_IRWXG[/b] [table][row][col] [/col][col]00070 Le groupe a les autorisations de lecture, écriture, exécution.[/col][/row][/table] [b]S_IRGRP[/b] [table][row][col] [/col][col]00040 Le groupe a l'autorisation de lecture.[/col][/row][/table] [b]S_IWGRP[/b] [table][row][col] [/col][col]00020 Le groupe a l'autorisation d'écriture.[/col][/row][/table] [b]S_IXGRP[/b] [table][row][col] [/col][col]00010 Le groupe a l'autorisation d'exécution.[/col][/row][/table] [b]S_IRWXO[/b] [table][row][col] [/col][col]00007 Tout le monde a les autorisations de lecture, écriture, exécution.[/col][/row][/table] [b]S_IROTH[/b] [table][row][col] [/col][col]00004 Tout le monde a l'autorisation de lecture.[/col][/row][/table] [b]S_IWOTH[/b] [table][row][col] [/col][col]00002 Tout le monde a l'autorisation d'écriture.[/col][/row][/table] [b]S_IXOTH[/b] [table][row][col] [/col][col]00001 Tout le monde a l'autorisation d'exécution.[/col][/row][/table] Le [i]mode[/i] devrait toujours être indiqué quand [b]O_CREAT[/b] est dans les attributs [b]flags ,[/b] (il est ignoré dans les autres cas). [b]creat[/b] est équivalent à [b]open[/b] avec l'attribut [i]flags[/i] égal à [b]O_CREAT | O_WRONLY | O_TRUNC .[/b] [size=18] [b]Valeur renvoyée[/b] [/size] [b]open et creat[/b] renvoient le nouveau descripteur de fichier s'ils réussissent, ou -1 s'ils échouent, auquel cas [i]errno[/i] contient le code d'erreur. Notez que [b]open[/b] peut ouvrir des fichiers spéciaux mais [b]creat[/b] ne peut pas en créer, il faut utiliser [b]mknod (2)[/b] à la place. Sur les systèmes de fichiers NFS, où la correspondance d'UID est activée, [b]open[/b] peut renvoyer un descripteur de fichier alors qu'une requête [b]read[/b](2) par exemple sera refusée avec le code d'erreur [b]EACCES[/b]. En effet, c'est le client qui effectué [b]open[/b] 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. Si un fichiers est créé, ses horodatages atime, ctime, mtime sont fixés à l'heure actuelle, ainsi que ctime et mtime du répertoire parent. Sinon, si le fichier est modifié à cause de l'attribut O_TRUNC, ses champs ctime et mtime sont remplis avec l'heure actuelle. [size=18] [b]Erreurs[/b] [/size] [b]EEXIST[/b] [i]pathname[/i] [table][row][col] [/col][col]existe déjà et [b]O_CREAT et O_EXCL[/b] ont été indiqués.[/col][/row][/table] [b]EISDIR[/b] [table][row][col] [/col][col]On a demandé une écriture alors que [i]pathname[/i] correspond à un répertoire (en fait, [b]O_WRONLY[/b] ou [b]O_RDWR[/b] ont été demandés).[/col][/row][/table] [b]EACCES[/b] [table][row][col] [/col][col]L'accès demandé au fichier est interdit, ou l'un des répertoires du chemin [b]pathname[/b] ne permet pas de consultation, ou le fichier n'existe pas mais le répertoire parent ne permet pas l'écriture.[/col][/row][/table] [b]ENAMETOOLONG[/b] [b]pathname est trop long.[/b][/col][/row][/table] [b]ENOENT[/b] [table][row][col] [/col][col]O_CREAT est absent et le fichier n'existe pas. Ou un répertoire du chemin d'accès [i]pathname[/i] n'existe pas, ou est un lien symbolique pointant nulle part.[/col][/row][/table] [b]ENOTDIR[/b] [table][row][col] [/col][col]Un élément du chemin d'accès [i]pathname[/i] n'est pas un répertoire, ou l'attribut [b]O_DIRECTORY[/b] est utilisé et [i]pathname[/i] n'est pas un répertoire.[/col][/row][/table] [b]ENXIO[/b] [table][row][col] [/col][col]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.[/col][/row][/table] [b]ENODEV[/b] [i]pathname[/i] [table][row][col] [/col][col]correspond à un fichier spécial et il n'y a pas de périphérique correspondant.[/col][/row][/table] [b]EROFS[/b] [table][row][col] [/col][col]Un accès en écriture est demandé alors que [i]pathname[/i] réside sur un système de fichiers en lecture seule.[/col][/row][/table] [b]ETXTBSY[/b] [table][row][col] [/col][col]On a demandé une écriture alors que [i]pathname[/i] correspond à un fichier exécutable actuellement utilisé.[/col][/row][/table] [b]EFAULT[/b] [b]pathname pointe en dehors de l'espace d'adressage accessible[/b][/col][/row][/table] [b]ELOOP[/b] [i]pathname[/i] [table][row][col] [/col][col]contient une référence circulaire (à travers un lien symbolique), ou l'attribut [b]O_NOFOLLOW[/b] est indiqué et [i]pathname[/i] est un lien symbolique.[/col][/row][/table] [b]ENOSPC[/b] [i]pathname[/i] [table][row][col] [/col][col]devrait être créé mais le périphérique concerné n'a plus assez de place pour un nouveau fichier.[/col][/row][/table] [b]ENOMEM[/b] [table][row][col] [/col][col]Pas assez de mémoire pour le noyau[/col][/row][/table] [b]EMFILE[/b] [table][row][col] [/col][col]Le processus a déjà ouvert le nombre maximal de fichiers.[/col][/row][/table] [b]ENFILE[/b] [table][row][col] [/col][col]La limite du nombre total de fichiers ouverts sur le système est atteinte.[/col][/row][/table] [size=18] [b]Conformité[/b] [/size] SVr4, SVID, POSIX, X/OPEN, BSD 4.3. Les attributs [b]O_NOFOLLOW[/b] et [b]O_DIRECTORY[/b] sont spécifiques à Linux. Il faut définir la constante symbolique [b]_GNU_SOURCE[/b] pour avoir leurs définitions. L'effet (indéfini) de [b]O_RDONLY | O_TRUNC[/b] varie suivant les implémentations. Sur de nombreux systèmes, le ficier est effectivement tronqué. L'attribut [b]O_DIRECT[/b] a été introduit par SGI IRIX, qui a des restritions d'alignement identiques à Linux. IRIX a aussi un appel fcntl(2) pour obtenir les alignements et tailles appropriés. FreeBSD 4.x a introduit un attribut du même nom, mais sans les restrictions d'alignement. Le support a été ajouté dans Linux 2.4.10. Les noyaux plus anciens ignorent simplement cet attribut. [size=18] [b]Bugs[/b] [/size] "Ce qui m'a toujours dérangé avec O_DIRECT est que toute l'interface est stupide et a probablement été conçue par un singe dérangé, sous l'influence de substances psychotropes puissantes". -- Linus. [size=18] [b]Restrictions[/b] [/size] Plusieurs problèmes se posent avec le protocole NFS, concernant entre autres [b]O_SYNC , et O_NDELAY .[/b] POSIX fournit trois variantes différentes des entrées/sorties synchronisées correspondant aux attributs [b]O_SYNC[/b], [b]O_DSYNC[/b] et [b]O_RSYNC[/b]. Actuellement (2.1.130) elles sont toutes équivalentes sous Linux. [size=18] [b]Voir aussi[/b] [/size] [b]read (2),[/b] [b]write (2),[/b] [b]fcntl (2),[/b] [b]close (2),[/b] [b]link (2),[/b] [b]mknod (2),[/b] [b]mount (2),[/b] [b]stat (2),[/b] [b]umask (2),[/b] [b]unlink (2),[/b] [b]socket (2),[/b] [b]fopen (3),[/b] [b]fifo (4)[/b] [size=18] [b]Traduction[/b] [/size] Christophe Blaess, 1996-2003.
Fichier
Forum
-
Derniers messages
Bavardages
Aujourd'hui, je rénove ou je construis ^^
Software
problème sur windows 10
Réseaux et Télécom
Administrateur Réseau - Cisco
Réseaux et Télécom
Problème wifi (POE)
Software
Postfix - Need help
Bavardages
Oh râge oh désespoir !
Programmation
Enregistrement client et envoi mail
Software
SÉCURITÉ MACBOOK
Hardware
conseil matos réseau?
Hardware
nVidia Shield Android TV
Actualités
-
Archives
Matériel
Nvidia prévient d'une pénurie de GPU ce trimestre, avec une reprise début 2025
Les Technos
Les Technos #469 : Un jour sans fin
Jeux Vidéos
Test Farming Simulator 25 (PS5) - Des innovations intéressantes mais des performances à revoir
Matériel
Qualcomm souhaite réduire davantage les prix des PC Windows basés sur ARM
Tablettes
Finalement, Google préparerait une nouvelle tablette mais la Pixel Tablet 2 serait abandonnée
Ada
CSS
Cobol
CPP
HTML
Fortran
Java
JavaScript
Pascal
Perl
PHP
Python
SQL
VB
XML
Anon URL
DailyMotion
eBay
Flickr
FLV
Google Video
Google Maps
Metacafe
MP3
SeeqPod
Veoh
Yahoo Video
YouTube
6px
8px
10px
12px
14px
16px
18px
Informaticien.be
- © 2002-2024
Akretio
SPRL - Generated via
Kelare
The Akretio Network:
Akretio
-
Freedelity
-
KelCommerce
-
Votre publicité sur informaticien.be ?