Was ist S_ISREG () und was macht es?

7

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.

    
The Pointer 20.10.2016, 19:48
quelle

3 Antworten

12

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%     
Bjorn A. 20.10.2016, 19:55
quelle
4

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.

    
Kaz 20.10.2016 20:23
quelle
3

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.

%Vor%

Das st_mode -Member enthält 4 Bits, die durch S_IFMT (0170000) maskiert sind. Die Werte dieser Bits sind:

%Vor%

, 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:

%Vor%

was in meiner vereinfachten Version im Wesentlichen gleich ist.

    
Clifford 20.10.2016 20:16
quelle

Tags und Links