Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

stat, stat64, statx, stat64x - Dateistatus abfragen

&pagelevel(4)&pagelevel

Definition

#include <sys/stat.h>
#include <sys/types.h>

int stat (const char *path, struct stat *buf);
int stat64 (const char *path, struct stat64 *buf);

CRTE111A30

int statx(const char *path, struct statx *buf);
int stat64x(const char *path, struct stat64x *buf); (Ende)

Beschreibung

stat() erhält Informationen über die angegebene Datei und schreibt diese Informationen in die Struktur, auf die buf zeigt.

path zeigt auf einen Pfadnamen, der die Datei benennt. Das Lese-, Schreib- oder Ausführungrecht dieser Datei wird nicht benötigt. Es müssen jedoch alle Dateiverzeichnisse, die im Pfadnamen aufgeführt werden, durchsuchbar sein.

buf ist ein Zeiger auf eine Struktur vom Typ stat, der in der Include-Datei sys/stat.h definiert ist. In diese Struktur werden die Informationen zur Datei eingetragen.

stat() aktualisiert alle zeitbezogenen Strukturkomponenten so, wie es im Fachwortverzeichnis unter „Dateizeiten-Änderung“ beschrieben wird, bevor diese Komponenten in die Struktur stat geschrieben werden.

Die Strukturkomponenten st_mode, st_ino, st_dev, st_uid, st_gid, st_atime, st_ctime und st_mtime haben danach sinnvolle Werte für alle Dateitypen. Der Wert der Strukturkomponente st_nlink wird auf die Anzahl der Verweise auf die Datei gesetzt.

Es besteht kein funktionaler Unterschied zwischen stat() und stat64(), außer dass stat64() eine stat64- Struktur verwendet.

Zum Inhalt der stat-Struktur, auf die von buf gewiesen wird, gehören folgende Elemente:

mode_t    st_mode;    /* Dateimodus (siehe mknod()) */
ino_t     st_ino;     /* Dateikennziffer (i-Node) */
dev_t     st_dev;     /* Gerätekennung, die einen
                         Verzeichniseintrag für diese Datei enthält */
dev_t     st_rdev;    /* Gerätekennung, nur für zeichen- oder
                         blockorientierte Gerätedateien definiert */
nlink_t   st_nlink;   /* Anzahl der Verweise */
uid_t     st_uid;     /* Benutzerkennung des Dateibesitzers */
gid_t     st_gid;     /* Gruppenkennung des Dateibesitzers */
off_t     st_size;    /* Dateigröße in Bytes */
time_t    st_atime;   /* Zeit des letzten Zugriffs */
time_t    st_mtime;   /* Zeit der letzten Datenänderung */
time_t    st_ctime;   /* Zeit der letzten Änderung des Dateistatus
                         Die Zeit wird in Sekunden gemessen ab dem
                         1. Januar 1970, 00:00:00 Uhr */

Erweiterung

long      st_blksize; /* Bevorzugte Ein-/Ausgabe-Blockgröße */
blkcnt_t  st_blocks;  /* Anzahl zugewiesener st_blksize-Blöcke */  

(Ende)

Die Elemente der Struktur stat64 sind wie die von stat definiert, mit Ausnahme folgender Komponenten:

ino64_t    st_ino
off64_t    st_size
blkcnt64_t st_blocks

Die Elemente der Strukturen statx bzw. stat64x sind wie die von stat bzw. stat64 definiert, mit Ausnahme folgender Komponenten:

time64_t    st_atime;
time64_t    st_mtime;
time64_t    st_ctime; 

Die Elemente der Struktur haben folgende Bedeutung:

st_mode

Der Modus der Datei ist im Systemaufruf mknod() beschrieben.

st_ino

kennzeichnet die Datei im gegebenen Dateisystem eindeutig. Das Paar st_ino und st_dev kennzeichnet normale Dateien eindeutig.

st_dev

kennzeichnet das Dateisystem, in dem die Datei liegt, eindeutig.

st_rdev

darf nur von Verwaltungskommandos benutzt werden. Dieses Kennzeichen ist nur für block- oder zeichenorientierte Dateien gültig und hat nur in dem System eine Bedeutung, in dem die Datei konfiguriert wurde.

st_nlink

darf nur von Verwaltungskommandos benutzt werden.

st_uid

Benutzernummer des Eigentümers der Datei.

st_gid

Gruppennummer der Gruppe, der die Datei zugeordnet ist.

st_size

Für normale Dateien ist dies die Größe der Datei in Byte. Für block- oder zeichenorientierte Dateien ist dieses nicht definiert. Für PAM-Dateien enthält dieses Strukturelement die Länge. Ein eventuell vorhandener Marker wird dabei nicht berücksichtigt. Ist der LBP Null, zählt der gesamte letzte Block zur Länge.

st_atime

Uhrzeit, zu der zuletzt auf die Dateidaten zugegriffen wurde. Wird von folgenden Systemaufrufen geändert: creat(), mknod(), utime() und read().

st_mtime

Uhrzeit, zu der Daten zuletzt geändert wurden. Wird von folgenden Systemaufrufen geändert: creat(), mknod(), utime() und write().

st_ctime

Uhrzeit, zu der der Dateistatus zuletzt geändert wurde. Wird von folgenden Systemaufrufen geändert: chmod(), chown(), creat(), link(), mknod(), unlink(), utime() und write().

Erweiterung

st_blksize

Ein Hinweis auf die ’beste’ Größe einer Einheit für Ein/Ausgabe-Operationen. Dieses Feld ist für block- oder zeichenorientierte Gerätedateien nicht definiert.

st_blocks

Die Gesamtanzahl von physikalischen Blöcken der Größe 512 Byte, die zurzeit auf der Platte belegt ist. Dieses Feld ist für block- oder zeichenorientierte Gerätedateien nicht definiert. (Ende)

BS2000

Bei BS2000-Dateien werden folgende Elemente der stat-Struktur gesetzt:

mode_t st_mode

Dateimodus, der Zugriffsrechte und Dateityp beinhaltet.

Zugriffsrechte: Hier wird das Basic ACL auf die Dateischutzbits abgebildet.
Die Schutzbits sind alle 0, wenn die Datei keinen Basic ACL Schutz hat.
Dateityp: Einführung eines neuen Dateityps S_IFDVSBS2=X'10000000'.
Dieser Typ ist allerdings nicht disjunkt zu S_IFPOSIXBS2.
Abgefragt kann mit dem Makro S_ISDVSBS2(mode) werden.

Einführung eines neuen Dateityps S_IFDVSNODE=X'20000000'.
Dieser Typ ist ebenfalls nicht disjunkt zu S_IFPOSIXBS2.
Abgefragt kann mit dem Makro S_ISDVSNODE(mode) werden.

Eine Node-Datei ist auch eine BS2000 DVS-Datei.
D. h. für Node-Dateien ist auch immer das Bit S_IFDVSBS2 gesetzt.

time_t st_atime

Zeitpunkt des letzten Zugriffs wie im BS2000 üblich (last access time),
aber in Sekunden seit dem 1.1.1970 UTC.

time_t st_mtime

Zeitpunkt der letzten Änderung (last modification time).

time_t st_ctime

Zeitpunkt der Erzeugung (creation time).

long st_blksize

Blockgröße, 2k (d.h. 1 PAM Page).

long st_blocks

Anzahl der von der Datei belegten Blöcke auf der Platte.

dev_t st_dev

enthält die 4 Byte lange catid.

Die beiden hintereinander liegenden Felder 

uid_t st_uid
gid_t st_uid

und
enthalten die 8 Byte lange BS2000-Userid.

Alle anderen Felder werden auf 0 gesetzt.

(Ende)

Returnwert

0

bei Erfolg.


-1

bei Fehler. Für POSIX-Dateien wird errno gesetzt, um den Fehler anzuzeigen.

Fehler

stat()stat64statx und stat64x() schlagen fehl, wenn gilt:


EACCES

Für eine Komponente des Pfades besteht kein Durchsuchrecht.


Erweiterung


EFAULT

buf oder path weisen auf eine ungültige Adresse.


EINTR

Ein Signal wurde während des Systemaufrufs stat() oder lstat() abgefangen.


EINVAL

Die genannte Datei existiert nicht oder das Argument path zeigt auf eine leere Zeichenkette.(Ende)


EIO

Beim Lesen des Dateisystems trat ein Ein-/Ausgabefehler auf.


ELOOP

Bei der Übersetzung von path wurden zuviele symbolische Verweise angetroffen.


Erweiterung 


EMULTIHOP

Komponenten von path erfordern den Sprung auf mehrere ferne Rechner, aber der Dateisystemtyp erlaubt dies nicht. (Ende)


ENAMETOOLONG 



Die Länge von path überschreitet {PATH_MAX} oder eine Pfadnamen-Komponente ist länger als {NAME_MAX}, während {_POSIX_NO_TRUNC} aktiv ist.


Erweiterung 


ENOLINK

path weist auf einen fernen Rechner, zu dem keine aktive Verbindung existiert. (Ende)


ENOENT

Die angegebene Datei ist nicht vorhanden oder ist der Null-Pfadname.


ENOTDIR

Eine Komponente des Pfades ist kein Dateiverzeichnis.


EOVERFLOW

Eine Komponente ist zu groß, um in der Struktur, auf die buf zeigt, gespeichert zu werden.


lstat() und lstat64() schlagen fehl, wenn gilt:

Erweiterung

 

EOVERFLOW

Ein Zeitstempel ist zu groß für eine time-t Komponente (dies wird nach dem 19.1.2038 03:14:07 Uhr UTC der Fall sein)(Ende)


lstatx() und lstat 64x() schlagen fehl, wenn gilt:

 

EINVAL

POSIX-BC Korrekturstand < A47.

Siehe auch

chmod(), chown(), creat(), fstat(), lstat(), link(), mknod(), sys/stat.h, sys/types.h.