B.6 Attribute von Dateien und Verzeichnissen
Die einzelnen Attribute zu einer Datei oder einem Verzeichnis können Sie aus der Struktur stat herauslesen. Die Struktur stat ist in der Headerdatei <sys/stat.h> definiert und besitzt gewöhnlich (wird nicht fest vorgeschrieben) die in der Tabelle aufgelisteten Strukturvariablen.
Tabelle B.33
Strukturvariablen in struct stat und deren Bedeutung
Variable
|
Bedeutung
|
POSIX
|
st_dev
|
Gerätenummer (Device-Nummer) des Dateisystems auf dem sich die Datei / das Verzeichnis befindet
|
ja
|
st_ino
|
Inode-Nummer
|
ja
|
st_mode
|
Dateimodus (Dateityp und Zugriffsrechte)
|
ja
|
st_nlink
|
Anzahl fester Links auf die Datei
|
ja
|
st_uid
|
UID des Dateieigentümers (ist logisch das UID/GID numerisch sind, sonst wären es ja nicht die UIDs)
|
ja
|
st_gid
|
Numerische GID des Dateieigentümers
|
ja
|
st_rdev
|
Geräte-ID (nur für Spezialdateien)
|
nein
|
st_size
|
Größe der Datei in Bytes
|
ja
|
st_atime
|
Datum des letzten Zugriffs
|
ja
|
st_mtime
|
Datum der letzten Veränderung
|
ja
|
st_ctime
|
Datum der Inode-Änderung
|
ja
|
st_blksize
|
Eingestellte Blockgröße
|
nein
|
st_blocks
|
Anzahl der verwendeten st_blksize-Blöcke
|
nein
|
B.6.1 Funktionen zum Erfragen der Dateiattribute
Tabelle B.34
Verschiedene Versionen zum Erfragen der Dateiattribute
Syntax
|
Bedeutung
|
int stat( const char *pfadname,
struct stat *buf );
|
Erfragen der Dateiattribute zu pfadname
|
int fstat( int fd,
struct stat *buf );
|
Erfragen der Dateiattribute zum Filedeskriptor fd
|
int lstat( const char *pfadname,
struct stat *buf );
|
Erfragen der Dateiattribute zu pfadname – ist pfadname ein symbolicher Link, wird dieser verfolgt
|
Dateiarten – st_mode
Tabelle B.35
Makros in <sys/stat.h> für die Dateiart st_mode
Makro
|
Bedeutung
|
S_ISREG()
|
Reguläre Datei
|
S_ISDIR()
|
Verzeichnis
|
S_ISCHR()
|
Zeichenorientierte Gerätedatei
|
S_ISBLK()
|
Blockorientierte Gerätedatei
|
S_ISFIFO()
|
Pipe
|
S_ISLINK()
|
Symbolischer Link (nicht bei POSIX.1 oder SVR4)
|
S_ISSOCK()
|
Socket (nicht bei POSIX.1 oder SVR4)
|
Zugriffsrechte – st_mode
Tabelle B.36
Zugriffsrechte der drei Benutzerklassen in <sys/stat.h>
Konstante
|
Bedeutung
|
Benutzerklasse
|
S_IRUSR
|
read (Leserecht)
|
Dateieigentümer
|
S_IWUSR
|
write (Schreibrecht)
|
Dateieigentümer
|
S_IXUSR
|
execute (Ausführrecht)
|
Dateieigentümer
|
S_IRGRP
|
read (Leserecht)
|
Gruppe des Dateieigentümers
|
S_IWGRP
|
write (Schreibrecht)
|
Gruppe des Dateieigentümers
|
S_IXGRP
|
execute (Ausführrecht)
|
Gruppe des Dateieigentümers
|
S_IROTH
|
read (Leserecht)
|
Alle anderen Benutzer
|
S_IWOTH
|
write (Schreibrecht)
|
Alle anderen Benutzer
|
S_IXOTH
|
execute (Ausführrecht)
|
Alle anderen Benutzer
|
Größe einer Datei – st_size, st_blocks, st_blksize
Wenn Sie die Größe einer Datei mit st_size abfragen, hängt dies von der Art der Datei (st_mode) ab.
Tabelle B.37
Größe von Dateien
Dateiart
|
Größe in st_size
|
Verzeichnis
|
Abhängig vom Filesystem
|
Reguläre Datei
|
Bytezahl der entsprechenden Datei
|
symbolischer Link
|
Länge in Bytes des Dateinamens vom symbolischen Link (mit \0)
|
Pipes
|
Anzahl der Bytes, die zum Lesen zur Verfügung stehen
|
In SVR4 und BSD gibt es in der Struktur stat auch noch die Variablen st_blksize und st_blocks, mit denen die voreingestellte Blockgröße der Ein-/Ausgabe und die Anzahl der Blöcke, die eine Datei belegt, angegeben werden.
B.6.2 Funktionen zum Erfragen oder Setzen bestimmter Zugriffsrechte
Tabelle B.38
Erfragen und Setzen von Zugriffsrechten
Funktion
|
Bedeutung
|
int chmod( const char *pfad,
mode_t modus) ;
int fchmod( int fd,
mode_t modus) ;
|
Zugriffsrechte für eine Datei ändern
|
int access( const char *pfad,
mode_t modus) ;
|
Zugriffsrechte für reale User/Group-ID zu einer Datei erfragen
|
int chown( const char *path,
uid_t owner,
gid_t group);
int fchown( int fd,
uid_t owner,
gid_t group);
|
Ändern der User- und Group-ID einer Datei
|
int lchown( const char *path,
uid_t owner,
gid_t group );
|
|
mode_t umask( mode_t mask) ;
|
Abfragen und Setzen einer Dateikreierungsmaske
|
|