OPEN |
Ouvre |
---|---|
sys/stat.h fcntl.h |
Syntaxe
int open(const char *pathname, int flags); |
int open(const char *pathname, int flags, mode_t mode); |
Paramètres
Nom | Description | ||
---|---|---|---|
pathname | Ce paramètre permet d'indiquer le nom du fichier. | ||
oflag | Ce paramètre permet d'indiquer le drapeau de mode d'ouverture (les constantes peuvent être combiné avec un caractère «|» sauf pour O_RDONLY, O_WRONLY et O_RDWR) : | ||
Constante | Description | ||
O_RDONLY | Cette constante permet d'indiquer qu'il faut ouvrir le fichier en mode lecture seulement. | ||
O_WRONLY | Cette constante permet d'indiquer qu'il faut ouvrir le fichier en mode écriture seulement. | ||
O_RDWR | Cette constante permet d'indiquer qu'il faut ouvrir le fichier en mode lecture et écriture. | ||
O_APPEND | Cette constante permet d'indiquer que le déplacement du fichier doit être défini à la fin du fichier avant chaque écriture. | ||
O_CREAT | Cette constante permet de créer le fichier. | ||
O_DSYNC | Cette constante permet d'indiquer que les opérations d'entrée/sortie d'écriture dans le descripteur de fichier doivent se terminer comme défini par l'achèvement de l'intégrité des données d'entrée/sortie synchronisées. | ||
O_EXCL | Cette constante permet d'indiquer que si le fichier existe, il ne peut pas être créé et qu'il doit retourner un erreur dans errno. | ||
O_NOCTTY | Cette constante permet d'indiquer que si l'ensemble et le chemin de fichier identifient un terminal, la fonction open() ne doit pas faire en sorte que le terminal devienne le terminal de contrôle du processus. | ||
O_NONBLOCK | Cette constante permet d'indiquer que s'il est en mode lecture qu'il doit retourné sans délai et si elle est écriture, il doit bloquer le processus léger appelant jusqu'à ce qu'un processus léger ouvre le fichier en écriture. | ||
O_RSYNC | Cette constante permet d'indiquer que les opérations d'entrée/sortie de lecture sur le descripteur de fichier doivent se terminer au même niveau d'intégrité que celui spécifié par les drapeaux O_DSYNC et O_SYNC. | ||
O_SYNC | Cette constante permet d'indiquer que les opérations d'entrée/sortie en écriture sur le descripteur de fichier doivent se terminer comme défini par l'achèvement de l'intégrité du fichier d'entrée/sortie synchronisé. | ||
O_TRUNC | Cette constante permet d'indiquer que le fichier doit avoir la taille de 0 octets et donc que les données sont effacé s'il existe et a été ouvert avec succès par O_RDWR ou O_WRONLY. | ||
O_CLOEXEC | Cette constante permet d'activer le drapeau close-on-exec pour le nouveau descripteur de fichier. Cette constante est disponible à partir du noyau Linux 2.6.23. | ||
mode | Ce paramètre permet d'indiquer les permissions : | ||
Constante | Valeur | Description | |
S_IRWXU | 00700 | Cette valeur permet d'indiquer que l'utilisateur a la permission en lecture, écriture et d'exécution. | |
S_IRUSR | 00400 | Cette valeur permet d'indiquer que l'utilisateur a la permission en lecture. | |
S_IWUSR | 00200 | Cette valeur permet d'indiquer que l'utilisateur a la permission en écriture. | |
S_IXUSR | 00100 | Cette valeur permet d'indiquer que l'utilisateur a la permission en exécution. | |
S_IRWXG | 00070 | Cette valeur permet d'indiquer que le groupe a la permission en lecture, écriture et exécution. | |
S_IRGRP | 00040 | Cette valeur permet d'indiquer que le groupe a la permission en lecture. | |
S_IRGRP | 00020 | Cette valeur permet d'indiquer que le groupe a la permission en écriture. | |
S_IXGRP | 00010 | Cette valeur permet d'indiquer que le groupe a la permission en exécution. | |
S_IRWXO | 00007 | Cette valeur permet d'indiquer que tous ont la permission en lecture, écriture et d'exécution. | |
S_IROTH | 00004 | Cette valeur permet d'indiquer que tous ont la permission en lecture. | |
S_IWOTH | 00002 | Cette valeur permet d'indiquer que tous ont la permission en écriture. | |
S_IXOTH | 00001 | Cette valeur permet d'indiquer que tous ont la permission en exécution. |
Retour
Valeur | Description |
---|---|
-1 | Cette valeur permet d'indiquer qu'une erreur s'est produite et la variable «errno» contiendra l'erreur. |
valeur entière != -1 | Ces valeurs permettent d'indiquer qu'un descripteur pour le socket est accepté. |
Description
Cette fonction permet d'effectuer l'ouverture d'un fichier en lecture et écriture.
Remarques
- Si O_CREAT est défini et que le fichier n'existait pas auparavant, la fonction open() doit complété avec succès pour mettre à jour les champs st_atime, st_ctime et st_mtime du fichier et les champs st_ctime et st_mtime du répertoire parent.
- Si O_TRUNC est défini et que le fichier existait précédemment, open() à mettre à jour les champs st_ctime et st_mtime du fichier.
- Si les indicateurs O_SYNC et O_DSYNC sont tous deux définis, le résultat sera que seul l'indicateur O_SYNC sera prise en compte.
- Si le paramètre path fait référence à un fichier de flux de données, le paramètres oflag peut être construit à partir de O_NONBLOCK avec O_RDONLY, O_WRONLY ou O_RDWR. Les autres valeurs d'indicateur ne sont pas applicables aux périphériques de flux de données et n'ont aucun effet sur celles-ci. La valeur O_NONBLOCK affecte le fonctionnement des pilotes de flux de données et certaines fonctions appliquées aux descripteurs de fichiers associés aux fichiers de flux de données. Pour les pilotes de flux de données, l'intégration de O_NONBLOCK est spécifique au périphérique.
- Si le nom du paramètre path indique le côté maître d'un périphérique pseudo-terminal, il n'est pas spécifié dans la documentation si la fonction open() verrouille le côté esclave afin qu'il ne puisse pas être ouvert, par conséquent, les applications conformes doivent appeler la fonction unlockpt() avant d'ouvrir le côté esclave.
- La plus grande valeur pouvant être représentée correctement dans un objet de type off_t doit être établie en tant que maximum de déplacement dans la description du fichier ouverte.
- Vous pouvez utiliser la commande Linux suivante «ulimit -a» pour connaître le nombre maximum de fichiers ouvert simultanément et la commande «cat /proc/sys/fs/file-max» pour connaître le nombre maximum de fichiers pouvant être ouvert par le système d'exploitation.
Exemples
L'exemple suivant permet de créer le fichier «.htaccess» dans l'emplacement courant :
- #include <fcntl.h>
- #include <stdio.h>
- #include <stdlib.h>
-
- void main() {
- int Handle;
- if ((Handle = open(".htaccess", O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)) == -1) {
- perror("Impossible de créer le fichier\n");
- exit(1);
- } else {
- puts("Traitement...");
- close(Handle);
- puts("FIN");
- }
- }
L'exemple suivant permet de lire le fichier «.htaccess» existant dans l'emplacement courant :
L'exemple suivant permet d'ouvrir le même un certain nombre de fois :
- #include <fcntl.h>
- #include <stdio.h>
- #include <stdlib.h>
-
- #define MAX_FILES 10000
-
- void main() {
- int Handle[MAX_FILES];
- int I;
- puts("OUVRE LE FICHIER UN CERTAIN NOMBRE DE FOIS...");
- for(I = 1;I < MAX_FILES; I++) {
- if ((Handle[I] = open(".htaccess", O_RDONLY)) == -1) {
- printf("Tentative %i d'ouverture de fichier\n",I);
- exit(1);
- }
- }
- puts("FERME LES FICHIERS...");
- for(I = 1;I < MAX_FILES; I++) {
- close(Handle[I]);
- }
- puts("FIN");
- }
si vous avez une limite de 1021 fichiers par processus, vous obtiendrez donc le résultat suivant :
OUVRE LE FICHIER UN CERTAIN NOMBRE DE FOIS...Tentative 1022 d'ouverture de fichier
Voir également
Langage de programmation - Perl - Référence procédures et fonctions - open
Dernière mise à jour : Vendredi, le 6 avril 2018