STAT SYSTEM CALL LINUX Tutoriel

STAT SYSTEM CALL LINUX Tutoriel

Appels du système Linux

Les appels système fournis par le noyau Linux sont exposés dans le langage de programmation C via GLIBC. Lorsqu'un appel système est utilisé, vous communiquez au système d'exploitation et sur le retour, le système d'exploitation vous communique via les paramètres qui sont retournés aux fonctions d'appel système (valeurs de retour).

Appel système STAT:

L'appel système STAT est un appel système dans Linux pour vérifier l'état d'un fichier tel que pour vérifier lorsque le fichier a été accessible. L'appel système stat () renvoie réellement les attributs de fichiers. Les attributs de fichiers d'un inode sont essentiellement renvoyés par la fonction stat (). Un inode contient les métadonnées du fichier. Un inode contient: le type du fichier, la taille du fichier, lorsque le fichier a été accessible (modifié, supprimé) c'est-à-dire des horodatages et le chemin du fichier, l'ID utilisateur et l'ID de groupe, les liens du fichier et adresse physique du contenu de fichier.

On peut dire qu'Inode contient toutes les données requises pour l'appel système STAT () et c'est le numéro d'index du fichier qui est enregistré dans le tableau Inode. Chaque fois que vous créez un fichier, un numéro inode pour ce fichier est créé. Utilisation du système STAT Appelez les tables système peuvent être affichées.

Syntaxe de C APPEL SYSTÈME STAT:

Pour utiliser l'appel système STAT dans le langage de programmation C, vous devez inclure le fichier d'en-tête suivant:

#inclure

STAT est utilisé pour obtenir le statut d'un fichier. La syntaxe de C STAT System Call peut ne pas être la même pour chaque système d'exploitation. Dans Linux, l'appel Syntaxe pour STAT est le suivant:

int stat (const char * chemin, struct stat * buf)

Le type de retour de la fonction dans int, si la fonction est exécutée avec succès, 0 est renvoyé s'il y a des erreurs, -1 sera renvoyé.

Ici CONS CHAR * Chemin Spécifie le nom du fichier. Si le chemin du fichier est un lien symbolique, vous devez spécifier le lien au lieu du nom du fichier.

Ensuite, dans la fonction, nous avons une structure de statistiques dans laquelle les données ou les informations sur le fichier sont stockées qui utilisent un pointeur nommé bouf, qui est passé en tant que paramtéter et rempli lors de l'exécution de l'appel et lisible par l'utilisateur après l'appel.

Structure des statistiques:

La structure statistique définie dans le fichier d'en-tête contient les champs suivants:

stat struct

MODE_T ST_MODE;
INO_T ST_INO;
dev_t st_dev;
dev_t st_rdev;
nlink_t st_nlink;
UID_T ST_UID;
GID_T ST_GID;
off_t st_size;
struct timSpec st_atim;
struct timSpec st_mtim;
struct timSpec st_ctim;
blksize_t st_blkSize;
BLKCNT_T ST_BLOCKS;
;

Description:

  1. ST_DEV: C'est l'ID de l'appareil dans lequel nous résidons actuellement notre fichier.
  2. ST_RDEV: Ce champ décrit qu'un fichier particulier représente un appareil particulier.
  3. ST_INO: C'est le numéro inode ou le numéro de série du fichier. Car c'est un numéro d'index, il devrait être unique pour tous les fichiers
  4. ST_SIZE: ST_SIZE est la taille du fichier en octets.
  5. ST_ATIME: C'est la dernière fois ou la dernière heure à laquelle le fichier a été accessible.
  6. st_ctime: C'est le moment récent auquel le statut ou les autorisations du fichier a été modifié.
  7. st_mtime: C'est le moment récent auquel le fichier a été modifié.
  8. ST_BLKSIZE: Ce champ donne la taille du bloc préférée pour le système de fichiers d'E / S qui peut varier d'un fichier à un fichier.
  9. ST_BLOCKS: Ce champ indique le nombre total de blocs en multiples de 512 octets.
  10. ST_NLINK: Ce champ indique le nombre total de liens rigoureux.
  11. ST_UID: Ce champ indique l'ID utilisateur.
  12. ST_GID: Ce champ indique l'ID de groupe.
  13. ST_MODE: Il indique les autorisations du fichier, indique les modes d'un fichier. Voici les drapeaux qui doivent être définis pour le champ ST_MODE:
Drapeaux Description Valeur du drapeau
S_ifmt Un massac 0170000
S_ifsock Une constante de fichier de socket 0140000
S_iflink Un fichier constant du lien symbolique 0120000
S_ifreg Fichier constant pour le fichier régulier 0100000
S_ifblk Fichier constant pour le fichier de bloc 0060000
S_ifdir Fichier constant pour le fichier de répertoire 0040000
S_ifchr Fichier constant pour le fichier de caractères 0020000
S_ififo Un fichier constant de FIFO 0010000
S_isuid Définir le bit d'ID utilisateur 0004000
S_isgid Définir le bit d'identification du groupe 0002000
S_isvtx Bit collant qui indique du texte partagé 0001000
S_irwxu Autorisations du propriétaire (lire, écrire, exécuter) 00700
S_irusr Lire les autorisations pour le propriétaire 00400
S_iwusr Écrire des autorisations pour le propriétaire 00200
S_ixusr Exécuter des autorisations pour le propriétaire 00100
S_irwxg Autorisations de groupe (lire, écrire, exécuter) 00070
S_irgrp Lire les autorisations pour le groupe 00040
S_iwgrp Écrire des autorisations pour le groupe 00020
S_ixgrp Exécuter des autorisations pour le groupe 00010
S_irwxo Autorisations pour les autres (lire, écrire, exécuter) 00007
S_iroth Lire les autorisations pour les autres 00004
S_iwoth Écrire des autorisations pour les autres 00002
S_ixoth Exécuter des autorisations pour les autres 00001

Comment utiliser l'appel du système STAT:

L'exemple suivant montre comment utiliser l'appel système STAT dans le langage de programmation C à Linux, Ubuntu.

EXEMPLE 1:

Dans le code suivant, nous allons trouver le mode d'un fichier:

CODE:

#inclure
#inclure
int main()

// pointeur vers STAT Struct
struct stat sfile;
// Appel système statistique
stat ("stat.c ", & sfile);
// accéder à ST_MODE (membre de données de STAT Struct)
printf ("ST_MODE =% O", SFILE.ST_MODE);
retour 0;

La compilation et l'exécution du programme reviennent comme ci-dessous:

Dans ce code, nous avons passé le nom du fichier dans l'appel système STAT, puis le pointeur vers STAT Struct qui est SFILE. Le pointeur vers STAT Struct est ensuite utilisé pour accéder à ST_MODE qui affiche le mode du fichier à l'aide de l'instruction PRINTF.

Le fichier d'en-tête est utilisé afin que vous puissiez utiliser l'appel système STAT. Le fichier d'en-tête est le fichier standard de bibliothèque d'entrée / sortie afin que vous puissiez utiliser printf ou scanf dans votre code C.

Exemple 2:

Dans le code suivant, nous allons obtenir des informations sur le fichier à l'aide de l'appel système STAT:

CODE:

#inclure
#inclure
#inclure
#inclure
void sfile (char const filename []);
int main()
ssize_t read;
char * tampon = 0;
size_t buf_size = 0;
printf ("Entrez le nom d'un fichier à vérifier: \ n");
read = getline (& buffer, & buf_size, stdin);
Si (lire <=0 )
printf ("getline a échoué \ n");
sortie (1);

if (buffer [read-1] == '\ n')
tampon [read-1] = 0;

int s = open (tampon, o_rdonly);
if (s == - 1)
printf ("Fichier n'existe pas \ n");
sortie (1);

autre
Sfile (tampon);

gratuit (tampon);
retour 0;

void sfile (char const filename [])
struct stat sfile;
if (stat (nom de fichier, & sfile) == - 1)
printf ("Erreur s'est produite \ n");

// accéder aux membres de données de STAT Struct
printf ("\ nfile st_uid% d \ n", sfile.st_uid);
printf ("\ nfile st_blkSize% ld \ n", sfile.st_blkSize);
printf ("\ nfile st_gid% d \ n", sfile.ST_GID);
printf ("\ nfile st_blocks% ld \ n", sfile.ST_BLOCKS);
printf ("\ nfile st_size% ld \ n", sfile.st_size);
printf ("\ nfile st_nlink% u \ n", (unsigned int) sfile.st_nlink);
printf ("\ nfile permissions user \ n");
printf ((sfile.ST_MODE & S_IRUSR)? "r": "-");
printf ((sfile.ST_MODE & S_IWUSR)? "W": "-");
printf ((sfile.ST_MODE & S_IXUSR)? "X":"-");
printf ("\ n");
printf ("\ nfile Permissions Group \ n");
printf ((sfile.ST_MODE & S_IRGRP)? "r": "-");
printf ((sfile.ST_MODE & S_IWGRP)? "W": "-");
printf ((sfile.ST_MODE & S_IXGRP)? "X":"-");
printf ("\ n");
printf ("\ nfile autorisation autre \ n");
printf ((sfile.ST_MODE & S_IROTH)? "r": "-");
printf ((sfile.ST_MODE & S_IWOTH)? "W": "-");
printf ((sfile.ST_MODE & S_IXOTH)? "X":"-");
printf ("\ n");

SORTIR:

Dans le code C ci-dessus, nous avons entré le nom du fichier et si le fichier n'existe pas, l'exécution du programme sera arrêtée. Ceci est démontré dans l'image suivante:

Si notre fichier existe, la fonction sfile (n) sera appelée dans laquelle nous avons passé le nom du fichier. À l'intérieur de la fonction, tout d'abord, nous avons utilisé l'appel du système STAT, si stat () renvoie -1, il doit y avoir une erreur afin qu'un message soit imprimé et que l'exécution du programme sera arrêtée.

Ensuite, dans l'instruction PRINTF, nous avons utilisé le nom de la fonction et du séparateur de points pour accéder aux membres de données de struct de statistiques.

Ensuite, pour le mode de fichier, nous avons accédé aux macros ou aux drapeaux de ST_MODE. Ici logique et l'opérateur est utilisé pour imprimer les modes respectifs. Nous avons vérifié les autorisations pour l'utilisateur, le groupe et autres pour le fichier spécifié (nom de fichier entré par l'utilisateur).

Avec cela, vous pouvez voir comment utiliser l'appel système STAT à partir du langage de programmation C pour obtenir des informations du noyau OS sur les fichiers. Si vous avez une question, n'hésitez pas à nous, dites-nous via la section des commentaires.