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)