Ich stieß auf das Makro S_ISREG () in einem C-Programm, das Dateiattribute abruft. Leider gibt es keine grundlegenden Informationen über dieses Makro online. Es gibt einige fortgeschrittene Diskussionen darüber, aber das ist jenseits dessen, wonach ich suche.
Was ist S_ISREG () und was macht es? Im Kontext eines Programms, das Dateiattribute abruft, welchen Zweck erfüllt es und was genau tut es?
Danke.
S_ISREG () ist ein Makro, das verwendet wird, um die Werte in einer stat-Struktur zu interpretieren, wie sie vom Systemaufruf stat () zurückgegeben werden. Es wird als wahr ausgewertet, wenn das Argument (das Element st_mode in struct stat) eine reguläre Datei ist.
Siehe man stat oder man fstat für weitere Details. Hier ist der relevante Teil der Manpage:
%Vor%Der POSIX-Standard, der S_ISREG definiert, ist tatsächlich online.
Quote:
Die folgenden Makros sollen zur Verfügung gestellt werden, um zu testen, ob eine Datei vom angegebenen Typ ist. Der Wert m , der an die Makros übergeben wird, ist der Wert von st_mode aus einer stat -Struktur. Das Makro muss zu einem Wert ungleich Null ausgewertet werden, wenn der Test wahr ist; 0 wenn der Test falsch ist.
[...]
S_ISFIFO ( m )
Testen Sie eine Pipe oder FIFO-Spezialdatei.
S_ISREG ( m )
Testen Sie eine reguläre Datei.
S_ISLNK ( m )
Test auf eine symbolische Verbindung.
[...]
Eine typische Methode zur Verwendung von S_ISREG besteht darin, zuerst die Funktion stat
aufzurufen, um ein Objekt struct stat
mit Informationen zu einer Datei zu füllen. Dann kann der Wert des Elements st_mode
dieser Struktur, ein Integer-Typ, mit diesem Makro getestet werden.
Zusätzlich zum Standard gibt es Manpages aus verschiedenen Systemen online, sowie Tutorials zur Programmierung mit stat. Die Wikipedia hat eine Seite auf Stat mit einem scheinbar vollständigen Codebeispiel. Obwohl es nicht S_ISREG
enthält, kann leicht daran gearbeitet werden.
Er testet das mit der Funktion st_mode
abgerufene stat
-Member der stat()
-Struktur, um festzustellen, ob es sich bei der Datei um eine reguläre Datei (dh auf Festplatte oder Massenspeicher und nicht um Verzeichnis, Socket, symbolische Verbindung) handelt zum Beispiel.
Das st_mode
-Member enthält 4 Bits, die durch S_IFMT
(0170000) maskiert sind. Die Werte dieser Bits sind:
, so dass das Makro S_ISREG definiert wird:
%Vor% Da es sich um ein Makro handelt, können Sie dessen tatsächliche Definition in der Header-Datei sys/stat.h
betrachten. Im GNU-Header ist dies definiert:
was in meiner vereinfachten Version im Wesentlichen gleich ist.
Tags und Links c macos linux operating-system unix