Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

fstat, fstat64, fstatx, fstat64x, fstatat, fstatat64, fstatatx, fstatat64x - Status einer offenen Datei abfragen

&pagelevel(4)&pagelevel

Definition

#include <sys/stat.h>

Optional
#include <sys/types.h> (Ende)

int fstat(int fildes, struct stat *buf);
int fstat64(int fildes, struct stat64 *buf);
int fstatat(int fd, const char *path, struct stat *buf, int flag);
int fstatat64(int fd, const char *path, struct stat64 *buf, int flag);

CRTE111A30
int fstatx(int fildes, struct statx *buf);
int fstat64x(int fildes, struct stat64x *buf);
int fstatatx(int fd, const char *path, struct statx *buf, int flag);
int fstatat64x(int fd, const char *path, struct stat64x *buf, int flag); (Ende)

Beschreibung

fstat() liefert Informationen über eine offene Datei mit einem Dateideskriptor fildes, der von einem erfolgreichen Systemaufruf open(), creat(), dup(), fcntl() oder pipe() geliefert wird.

buf ist ein Zeiger auf eine stat-Struktur, in die Informationen geschrieben werden, die die jeweilige Datei betreffen.

Es besteht kein funktionaler Unterschied zwischen fstat() und fstat64(), außer dass bei fstat64() der File Status in einer stat64-Struktur zurückgegeben wird.

Die Funktionen mit dem Suffix x verhalten sich, wie die gleichnamigen Funktionen ohne Suffix, außer dass sie den File Status in einer entsprechenden stat-Struktur mit Suffix x  zurückgeben und daher auch über den 19.1.2038 03:14:07 Uhr UTC hinaus korrekt funktionieren.

Zum Inhalt der Struktur, auf die buf zeigt, 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 */
long      st_blksize; /* Bevorzugte E/A-Blockgröße */
blkcnt_t   st_blocks;   /* Anzahl zugewiesener st_blksize-Blöcke */

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 einzelnen Elemente haben die folgende Bedeutung:

st_mode

Der Modus der Datei ist im Systemaufruf mknod() beschrieben. Zusätzlich zu den in mknod() beschriebenen Modi, kann der Modus einer Datei auch S_IFLNK sein, wenn die Datei ein symbolischer Verweis ist, oder S_IFS- OCK, wenn es sich um einen Socket-Deskriptor handelt.

st_ino

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

st_dev

st_rdev

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

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

st_nlink

st_uid

st_gid

st_size

darf nur von Verwaltungskommandos benutzt werden.

Benutzernummer des Eigentümers der Datei.

Gruppennummer der Gruppe, der die Datei zugeordnet ist.

Für normale Dateien ist dies die Größe der Datei in Bytes. 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 Daten der Datei zugegriffen wurde. Wird von folgenden Systemaufrufen geändert: creat(), mknod(), pipe(), utime() und read().

st_mtime

Uhrzeit, zu der Daten zuletzt geändert wurden. Wird von folgenden Systemaufrufen geändert: creat(), mknod(), pipe(), 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(), pipe(), unlink(), utime() und write().

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 Bytes, die zurzeit auf der Platte belegt sind. Dieses Feld ist für block- oder zeichenorientierte Gerätedateien nicht definiert.

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 letzen Ä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.

Die Funktionen fstatat() und fstatat64() sind äquivalent zu den Funktion stat() und stat64(), bzw. lstat() und lstat64() in Abhängigkeit des Werts von flag, außer wenn der Parameter path einen relativen Pfad spezifiziert. In diesem Fall wird die Datei, deren Status ermittelt werden soll, nicht im aktuellen Dateiverzeichnis, sondern in dem mit dem Dateideskriptor fd verbundenen Dateiverzeichnis gesucht. Wurde der Dateideskriptor ohne O_SEARCH geöffnet, prüfen die Funktionen, ob eine Suche im verbundenen Dateiverzeichnis mit den dem Dateiverzeichnis zugrunde liegenden Berechtigungen erlaubt ist. Wurde der Dateideskriptor mit O_SEARCH geöffnet, unterbleibt die Prüfung.

Im Parameter flag kann der Wert AT_SYMLINK_NOFOLLOW übergeben werden, der im Header fnctl.h definiert ist. Falls path einen symbolischen Link bezeichnet, wird dann der Status des symbolischen Links zurückgegeben.

Die Funktionen mit dem Suffix x verhalten sich, wie die gleichnamigen Funktionen ohne Suffix, außer dass sie auch über den 19.1.2038 03:14:07 Uhr UTC hinaus korrekt funktionieren.

Returnwert

0

bei Erfolg.


-1

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

Fehler

fstat(), fstat64(), fstatat(), fstatat64()fstatx(), fstat64x(), fstatatx() und fstatat64x() schlagen fehl, wenn gilt:


EBADF

fildes ist kein gültiger Dateideskriptor.


EFAULT

buf weist auf eine ungültige Adresse.


EIO

Beim Lesen des Dateisystems trat ein E/A-Fehler auf.


ENOLINK

fildes weist auf einen fernen Rechner zu dem die Verbindung nicht mehr
aktiv ist.


EOVERFLOW

Eine Komponente ist zu groß und kann nicht in die Struktur, auf die buf zeigt, gespeichert werden.


EINTR

Ein Signal wurde während des Systemaufrufs fstat() abgefangen.


fstat(), fstat64(), fstatat() und fstatat64() 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)


fstatat() und fstatat64() schlagen fehl, wenn gilt:


EACCES

Der Parameter fd wurde nicht mit O_SEARCH geöffnet und die dem Dateiverzeichnis zugrunde liegenden Berechtigungen erlauben nicht das Durchsuchen des Dateiverzeichnisses.


EBADF

Der Parameter path spezifiziert keinen absoluten Pfadnamen und der Parameter fd hat weder den Wert AT_FDCWD, noch enthält er einen gültigen zum Lesen oder Suchen geöffneten Dateideskriptor.


ENOTDIR

Der Parameter path spezifiziert keinen absoluten Pfadnamen und der Dateideskriptor fd ist nicht mit einem Dateiverzeichnis verbunden.


EINVAL

Der Wert des Parameters flag ist ungültig.


fstatx() und fstat64x() schlagen fehl, wenn gilt:

 

EINVAL

POSIX-BC Korrekturstand < A47.


fstatatx() and fstatat64x() schlagen fehl, wenn gilt: 

 

ENOSYS

POSIX-BC Korrekturstand < A47.

Siehe auch

chmod(), chown(), creat(), link(), lstat(), mknod(), stat(), unlink(), write(), fcntl.h, sys/stat.h, sys/types.h.