Sous-routine chmod, fchmod ou fchmodat
Objectif
Modifie les bits du mode de fichier de base de l'objet du système de fichiers.
Bibliothèque
Bibliothèque C standard (libc.a)
Syntaxe
#include <sys/stat.h>
int chmod (Path, Mode)
const char *Path;
mode_t Mode;
int fchmod (FileDescriptor, Mode)
int FileDescriptor;
mode_t Mode;
int fchmodat (DirFileDescriptor, Path, Mode, Flag)
int DirFileDescriptor;
const char *Path;
mode_t Mode;
int Flag;
Descriptif
La sous-routine chmod définit les droits d'accès du fichier spécifié par le paramètre Chemin . Si Network File System (NFS) est installé sur votre système, ce chemin peut se croiser dans un autre noeud.
Utilisez la sous-routine fchmod pour définir les droits d'accès d'un fichier ouvert désigné par le paramètre FileDescriptor .
Si FileDescriptor fait référence à un objet de mémoire partagée, la sous-routine fchmod affecte les bits d'autorisation de fichier S_IRUSR, S_IWUSR, S_IRGRP, S_IWGRP, S_IROTHet S_IWOTH .
Les informations de contrôle d'accès sont définies en fonction du paramètre Mode . Notez que ces routines remplaceront toute liste de contrôle d'accès existante associée à l'objet du système de fichiers.
Le sous-programme fchmodat est équivalent au sous-programme chmod si le paramètre Path spécifie un chemin absolu ou si le paramètre DirFileDescriptor a la valeur AT_FDCWD. Le fichier à modifier est déterminé par le chemin relatif du répertoire associé au paramètre DirFileDescriptor au lieu du répertoire de travail actuel. Si le répertoire est ouvert sans l'indicateur d'ouverture O_SEARCH , la sous-routine vérifie si les recherches de répertoire sont autorisées à l'aide des droits d'accès en cours du répertoire. Si le répertoire est ouvert avec l'indicateur d'ouverture O_SEARCH , la sous-routine n'effectue pas la vérification.
Paramètres
| Article | Descriptif |
|---|---|
| FileDescriptor | Indique le descripteur de fichier d'un fichier ouvert ou d'un objet de mémoire partagée. |
| aff | Indique le modèle de bit qui détermine les droits d'accès. Le paramètre Mode est construit en affectant logiquement une ou plusieurs des valeurs suivantes, qui sont définies dans le fichier sys/mode.h :
Les attributs suivants s'appliquent uniquement aux fichiers directement exécutables. Ils n'ont aucune signification lorsqu'ils sont appliqués à des fichiers texte exécutables tels que des scripts shell et des scripts awk .
Il existe d'autres valeurs de mode qui peuvent être définies avec la sous-routine mknod mais pas avec la sous-routine chmod . |
| PATH | Indique le nom de chemin du fichier. Pour fchmodat, si DirFileDescriptor est spécifié et que Path est relatif, DirFileDescriptor spécifie le répertoire de travail courant effectif pour Path. |
| DirFileDescriptor | Indique le descripteur de fichier d'un répertoire ouvert, qui est utilisé comme répertoire de travail en cours effectif pour le paramètre Chemin . Si DirFileDescriptor est égal à AT_FDCWD, le paramètre DirFileDescriptor est ignoré et l'argument Path spécifie le fichier complet. |
| Indicateur | Indique un argument de zone de bit. Si le paramètre Indicateur contient le bit AT_SYMLINK_NOFOLLOW et que le paramètre Chemin spécifie un lien symbolique, le mode du lien symbolique est modifié. |
Valeurs renvoyées
Une fois l'opération terminée, les sous-routines chmod, fchmodet fchmodat renvoient la valeur 0. Si la sous-routine chmod, fchmod ou fchmodat échoue, la valeur -1 est renvoyée et la variable globale errno est définie pour identifier l'erreur.
Codes d'erreur
La sous-routine chmod ou fchmodat échoue et les droits d'accès aux fichiers restent inchangés si l'une des conditions suivantes est vérifiée:
| Article | Descriptif |
|---|---|
| REP_ENOT | Un composant du préfixe Path n'est pas un répertoire. |
| EACCES | Le droit de recherche est refusé sur un composant du préfixe Path . |
| EFAULT | Le paramètre Chemin pointe vers un emplacement en dehors de l'espace adresse alloué du processus. |
| ELOOP | Trop de liens symboliques ont été détectés lors de la conversion du paramètre Chemin . |
| ENOENT | Le fichier nommé n'existe pas. |
| ENAMETOOLONG | Un composant du paramètre Chemin a dépassé 255 caractères, ou la totalité du paramètre Chemin a dépassé 1023 caractères. |
| Article | Descriptif |
|---|---|
| EBADF | La valeur du paramètre FileDescriptor n'est pas valide. |
| Article | Descriptif |
|---|---|
| EPERM | L'ID utilisateur effectif ne correspond pas au propriétaire du fichier et le processus ne dispose pas des privilèges appropriés. |
| EROFS | Le fichier nommé se trouve sur un système de fichiers en lecture seule. |
| EIO | Une erreur d'E-S s'est produite lors de l'opération. |
Si NFS est installé sur votre système, les sous-programmes chmod et fchmod peuvent également échouer si les conditions suivantes sont remplies:
| Article | Descriptif |
|---|---|
| ESTALE | Le répertoire racine ou en cours du processus se trouve dans un système de fichiers virtuel qui a été démonté. |
| ETIMEDOUT | Le délai de connexion a expiré. |
La sous-routine fchmodat échoue et les droits d'accès aux fichiers restent inchangés si l'une des conditions suivantes est vérifiée:
| Article | Descriptif |
|---|---|
| EBADF | Le paramètre Path ne spécifie pas un chemin absolu et l'argument DirFileDescriptor n'est ni AT_FDCWD ni un descripteur de fichier valide. |
| EINVAL | La valeur de l'argument Flag n'est pas valide. |
| REP_ENOT | Le paramètre Path n'est pas un chemin absolu et DirFileDescriptor est un descripteur de fichier mais n'est pas associé à un répertoire. |
Security
Contrôle d'accès: l'appelant doit disposer du droit de recherche pour tous les composants du préfixe Path .
Si vous recevez l'erreur EBUSY , activez l'attribut verrouillage appliqué dans le paramètre Mode et renouvelez l'opération. L'attribut verrouillage appliqué ne doit jamais être utilisé sur un fichier faisant partie de la base informatique sécurisée.