Maison >développement back-end >C++ >Comment vérifier si un répertoire existe sous Unix à l'aide de stat() et lstat() ?

Comment vérifier si un répertoire existe sous Unix à l'aide de stat() et lstat() ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-16 10:13:03358parcourir

How to Check if a Directory Exists in Unix Using stat() and lstat()?

Vérification de l'existence d'un répertoire sous Unix : utilisation des appels système stat() et lstat()

Déterminer si un répertoire spécifique existe est une tâche courante en programmation Unix. Bien que des fonctions comme opendir() puissent indiquer la présence d'un répertoire via la gestion des erreurs, ce n'est peut-être pas l'approche idéale pour simplement vérifier l'existence. Cet article présente des moyens efficaces d'accomplir cette tâche à l'aide des appels système stat() et lstat().

stat() et lstat()

Le stat() et les fonctions lstat() fournissent des informations précieuses sur l'existence et le type d'un fichier en fonction de son chemin d'accès. Contrairement à opendir(), ces fonctions n'ouvrent pas le fichier mais collectent plutôt des données sur ses attributs. La principale différence entre stat() et lstat() réside dans la façon dont ils gèrent les liens symboliques.

  • stat() : Suit les liens symboliques et fournit des informations sur l'objet lié.
  • lstat() : Évalue le lien symbolique lui-même, en fournissant des informations sur le sien attributs.

Pour vérifier si un fichier est un répertoire, la macro S_ISDIR() est utilisée en conjonction avec stat() ou lstat(). L'extrait de code suivant démontre son utilisation :

#include <sys/stat.h>

struct stat sb;

if (stat(pathname, &sb) == 0 && S_ISDIR(sb.st_mode)) {
    // Directory exists and is accessible
}

Vérifications supplémentaires du type de fichier

Outre les répertoires, divers autres types de fichiers peuvent être vérifiés à l'aide de macros S_IS* spécifiques. Voici une liste complète :

  • S_ISDIR — Répertoire
  • S_ISREG — Fichier normal
  • S_ISCHR — Périphérique de caractère
  • S_ISBLK — Bloquer l'appareil
  • S_ISFIFO — FIFO
  • S_ISLNK — Lien symbolique
  • S_ISSOCK — Socket

La compréhension de ces macros permet des vérifications polyvalentes du type de fichier dans vos programmes Unix.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn