Heim > Backend-Entwicklung > C++ > Hauptteil

Wie überprüfe ich mit stat() und lstat(), ob ein Verzeichnis unter Unix existiert?

Patricia Arquette
Freigeben: 2024-11-16 10:13:03
Original
284 Leute haben es durchsucht

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

Überprüfen der Verzeichnisexistenz unter Unix: Verwendung von stat()- und lstat()-Systemaufrufen

Die Feststellung, ob ein bestimmtes Verzeichnis vorhanden ist, ist eine häufige Aufgabe in der Unix-Programmierung. Während Funktionen wie opendir() durch Fehlerbehandlung das Vorhandensein eines Verzeichnisses anzeigen können, ist dies möglicherweise nicht der ideale Ansatz, um einfach die Existenz zu überprüfen. Dieser Artikel stellt effiziente Möglichkeiten vor, diese Aufgabe mithilfe der Systemaufrufe stat() und lstat() zu erledigen.

stat() und lstat()

Die Funktion stat() und lstat()-Funktionen liefern wertvolle Informationen über die Existenz und den Typ einer Datei basierend auf ihrem Pfadnamen. Im Gegensatz zu opendir() öffnen diese Funktionen die Datei nicht, sondern sammeln Daten über ihre Attribute. Der Hauptunterschied zwischen stat() und lstat() liegt in der Art und Weise, wie sie mit symbolischen Links umgehen.

  • stat(): Folgt symbolischen Links und stellt Informationen über das verknüpfte Objekt bereit.
  • lstat(): Wertet den symbolischen Link selbst aus und liefert Informationen über seine eigenen Attribute.

Um zu überprüfen, ob eine Datei ein Verzeichnis ist, verwendet S_ISDIR() Makro wird in Verbindung mit stat() oder lstat() verwendet. Der folgende Codeausschnitt demonstriert seine Verwendung:

#include <sys/stat.h>

struct stat sb;

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

Zusätzliche Dateitypprüfungen

Neben Verzeichnissen können verschiedene andere Dateitypen mithilfe spezifischer S_IS*-Makros überprüft werden. Hier ist eine umfassende Liste:

  • S_ISDIR – Verzeichnis
  • S_ISREG – Reguläre Datei
  • S_ISCHR – Zeichengerät
  • S_ISBLK – Blockgerät
  • S_ISFIFO – FIFO
  • S_ISLNK – Symbolischer Link
  • S_ISSOCK – Socket

Das Verständnis dieser Makros ermöglicht vielseitige Dateitypprüfungen in Ihren Unix-Programmen.

Das obige ist der detaillierte Inhalt vonWie überprüfe ich mit stat() und lstat(), ob ein Verzeichnis unter Unix existiert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage