1. Index
  2. Shell
  3. C
  4. POSIX
  5. JavaScript

Dateien und Pfade

Das Dateisystem ist hierarchisch aufgebaut. Verzeichnisse enthalten Dateien und Unterverzeichnisse. Ein Pfad ist eine durch Schrägstriche getrennte Liste von Namen. Absolute Pfade beginnen bei der Wurzel und weisen den Weg in die Tiefe der Hierarchie; Relative Pfade beginnen im aktuellen Arbeitsverzeichnis und können mit .. auf übergeordnete Verzeichnisse verweisen.

limits.h

Die maximale Länge von Datei- und Pfadnamen hängt vom Dateisystem ab. Für Systemaufrufe und praktische Zwecke gelten folgende Grenzen:

#define NAME_MAX 255 Obere Grenze für die Länge von Dateinamen
#define PATH_MAX 4096 Obere Grenze für die Länge von Pfadnamen, siehe pathconf

libgen.h

Verzeichnis- und Dateiname trennen.

char * basename (char * path) Entfernt Verzeichnispfad: /foo/bar/snafu.txt
char * dirname (char * path) Entfernt den Dateinamen: /foo/bar/snafu.txt

stdlib.h

Relativen Pfade auflösen und temporären Dateien erzeugen.

char * realpath (const char * path, char * resolved_path) Absoluter Pfad
Temporärdateien
char * mkdtemp (char * template) Temporäres Verzeichnis
int mkstemp (char * template) Temporäre Datei
int mkstemps (char * template, int suffixlen) … mit Suffix
int mkostemp (char * template, int flags) … mit Optionen
int mkostemps (char * template, int suffixlen, int flags) … mit Optionen und Suffix
PrefixXXXXXX.Suffix Die letzten 6 Zeichen der Schablone vor dem Suffix
müssen auf X lauten und werden ersetzt.
O_APPEND Hängt Daten hinten an die Datei an
O_SYNC Blockiert bis die Daten sicher auf Platte geschrieben sind.
O_CLOEXEC Schließen beim Aufruf von exec.

unistd.h

Arbeitsverzeichnis finden und wechseln, Dateien verknüpfen und Konfiguration lesen.

Verzeichnisse
char * getcwd (char * buf, size_t max) Gibt das Arbeitsverzeichnis in Puffer aus
int chroot (const char * path) Ändert das Wurzelverzeichnis, benötigt CAP_SYS_CHROOT
int chdir (const char * path) Wechselt das Arbeitsverzeichnis
int rmdir (const char * path) Löscht ein Verzeichnis, wenn es keine Einträge enthält
Dateien
int unlink (const char * path) Löscht einen Dateieintrag
int link (const char * oldpath, const char * newpath) Erzeugt Link auf eine Datei
int linkat (int olddirfd, const char * oldpath,
int newdirfd, const char * newpath, int flags);
int symlink (const char * oldpath, const char * newpath) Erzeugt Symlink
ssize_t readlink (const char * path, char * buf, size_t len) Löst einen Symlink auf
int access (const char * path, int mode) Prüft Zugriffsrechte
int chown (const char * path, uid_t owner, gid_t group) Setzt Besitzer und Gruppe einer Datei, benötigt CAP_CHOWN
int lchown (const char * path, uid_t owner, gid_t group) Setzt Besitzer und Gruppe eines Symlinks
int truncate (const char * path, off_t length) Kürzt eine Datei auf eine bestimmte Länge
Konfiguration
long pathconf ( char * path, int name) Gibt Auskunft über Eigenschaften des Dateisystems
long fpathconf ( int fd, int name) "
long sysconf (int name) Gibt Auskunft über systemweite Konstanten
size_t confstr (int name, char * buf, size_t len) Liest konfigurationsabhängige Werte aus
R_OK Lesen erlaubt
W_OK Schreiben erlaubt
X_OK Ausführen erlaubt
F_OK Zugriff erlaubt
_PC_LINK_MAX Maximale Anzahl Verknüpfungen
_PC_MAX_CANON Maximale formatierte Eingabe-Zeilenlänge eines Terminals
_PC_MAX_INPUT Maximale unformatierte Eingabe-Zeilenlänge eines Terminals
_PC_NAME_MAX Maximale Länge eines Dateinamens
_PC_PATH_MAX Maximale Länge eines relativen Pfads zum aktuellen Verzeichnis
_PC_PIPE_BUF Maximale Größe des Puffers einer FIFO
_PC_CHOWN_RESTRICTED Ist chown erlaubt?
_PC_NO_TRUNC Ist die Angabe zu langer Dateinamen erlaubt?
_PC_VDISABLE Ist die Behandlung von Steuerzeichen abschaltbar?
ARG_MAX Anzahl Kommandozeilenparameter
CHILD_MAX Anzahl Prozesse pro Benutzer, mindestens 25
CLK_TCK Zeitgebersignale pro Sekunde
OPEN_MAX Anzahl offener Dateien
PAGESIZE Seitengröße im Speicher
RE_DUP_MAX BREs in einem Regulären Ausdruck, mindestens 255
STREAM_MAX Anzahl offener Ströme (FOPEN_MAX)
SYMLOOP_MAX Rekursionstiefe für Symlinks
HOST_NAME_MAX Länge eines Hostnamens
LOGIN_NAME_MAX Länge eines Benuzternamens
TTY_NAME_MAX Länge eines Terminalnamens
TZNAME_MAX Länge eines Zeitzonennamens
_CS_PATH Pfad zu den Standardwerkzeugen (cp, mv, …)
_CS_GNU_LIBC_VERSION Versionsnummer
_CS_GNU_LIBPTHREAD_VERSION Versionsnummer

sys/stat.h

Metadaten abfragen.

#define S_ISLNK (mode) Symbolischer Verweis
#define S_ISREG (mode) Reguläre Datei
#define S_ISDIR (mode) Verzeichnis
#define S_ISCHR (mode) Zeichengerät
#define S_ISBLK (mode) Blockgerät
#define S_ISFIFO (mode) FIFO
#define S_ISSOCK (mode) Sockel
struct stat
dev_t st_dev Gerätenummer
ino_t st_ino Indexknotennummer
mode_t st_mode Zugriffsrechte
nlink_t st_nlink Referenzzähler
uid_t st_uid Besitzer
gid_t st_gid Gruppe
dev_t st_rdev Typ
off_t st_size Anzahl Oktette
blksize_t st_blksize Anzahl Blöcke
blkcnt_t st_blocks Belegte Blöcke
time_t st_atime Letzter Zugriff
time_t st_mtime Letzte Änderung
time_t st_ctime Letzte Statusänderung
int stat (const char * path, struct stat * buf) Ermittelt Status einer Datei
int lstat (const char * path, struct stat * buf) Ermittelt Status eines Symlinks
int chmod (const char * path, mode_t mode) Ändert Zugriffsrechte einer Datei
int mkdir (const char * path, mode_t mode) Erzeugt ein Verzeichnis
int mkfifo (const char * path, mode_t mode) Erzeugt eine FIFO
int mknod (const char * path, mode_t mode, dev_t dev) Erzeugt einen Dateisystem-Knoten
int mkdirat (int fd, const char * path, mode_t mode) Erzeugt Verzeichnis relativ zu einem anderen Verzeichnis
int mkfifoat (int fd, const char * path, mode_t mode) Erzeugt FIFO relativ zum Verzeichnis
int mknodat (int fd, const char * path, mode_t mode, dev_t dev) Erzeugt Dateisystem-Knoten relativ zum Verzeichnis
int fstat (int fd, struct stat * buf) Ermittelt Status einer geöffneten Datei
int fchmod (int fd, mode_t mode) Ändert Zugriffsrechte einer geöffneten Datei
mode_t getumask (void) Liefert Maske für Zugriffrechte
mode_t umask (mode_t mode) Setzt Maske für Zugriffrechte

dirent.h

Verzeichnis iterieren

struct dirent
ino_t d_ino Knotennummer
char d_name[] Dateiname
int scandir (const char * path, struct dirent *** dir,
int (* filter) (const struct dirent * entry),
int (* compare) (const struct dirent ** lhs,
const struct dirent ** rhs))
int alphasort (const struct dirent ** lhs,
const struct dirent ** rhs)
Mit strcoll sortieren
int versionsort (const struct dirent ** lhs,
const struct dirent ** rhs)
Mit strverscmp sortieren
typedef DIR Iterator
DIR * opendir (const char * path) Verzeichnis öffnen
DIR * fdopendir (int dirfd)
int dirfd (DIR * dir) Deskriptor für openat
struct dirent *readdir (DIR * dir) Eintrag lesen
int readdir_r (DIR * dir, struct dirent * entry,
struct dirent ** result)
long telldir (DIR * dir) Index der Leseposition
void seekdir (DIR * dir, long offset) Leseposition setzen
void rewinddir (DIR * dir) Leseposition auf Anfang
int closedir (DIR * dir) Deskriptor schließen

ftw.h

Verzeichnisbaum traversieren (File Tree Walk)

int ftw (const char * path, fn1, int flags)
int nftw (const char * path, fn2, int nopen, int flags)
typedef FTW
int base
int level
int fn1 (const char * path, const struct stat * st, int type)
int fn2 (const char * path, const struct stat * st, int type,
struct FTW * ftwbuf)
FTW_F Datei
FTW_D Verzeichnis
FTW_DNR Verzeichnis ohne Leserechte
FTW_DP Verzeichnis mit besuchten Unterverzeichnissen
FTW_NS Unbekannter Typ (stat ist fehlgeschlagen)
FTW_SL Symlink
FTW_SLN Symlink auf fehlende Datei
FTW_PHYS Folgt keinen Symlinks.
FTW_MOUNT Überquert keine Dateisystemgrenzen.
FTW_DEPTH Besucht Unterverzeichnisse zuerst.
FTW_CHDIR Wechselt vorher das aktuelle Arbeitsverzeichnis.

fts.h

Verzeichnisbaum traversieren (File Tree Scan). Die BSD-Variante arbeitet analog zu readdir mit wiederholten Aufrufen von fts_read.

typedef FTS Zustandsautomat
struct _ftsent FTSENT
unsigned short fts_info Klassifizierung
char * fts_accpath Relativ zum CWD
char * fts_path Relativ zum Start
short fts_pathlen Länge des Pfades
char * fts_name Dateiname
short fts_namelen Länge des Namens
short fts_level Rekursionstiefe
int fts_errno Fehlercode
long fts_number Nutzlast
void * fts_pointer Nutzlast
struct _ftsent * fts_parent Elternverzeichnis
struct _ftsent * fts_link Nächster Eintrag
struct _ftsent * fts_cycle Zyklen
struct stat * fts_statp Metadaten
FTS * fts_open (char * path_argv[], int options,
int (*compar) (const FTSENT **, const FTSENT **))
FTSENT * fts_read (FTS * ftsp) Nächster Eintrag
FTSENT * fts_children (FTS * ftsp, int instr) Verkettete Liste
int fts_set (FTS * ftsp, FTSENT * f, int instr)
int fts_close (FTS * ftsp)
FTS_D Normales Verzeichnis in Preorder
FTS_DC Zyklisches Verzeichnis, siehe fts_cycle
FTS_DEFAULT Keine der anderen Optionen
FTS_DNR Nicht lesbares Verzeichnis, siehe fts_errno
FTS_DOT . oder .. Verzeichnis
FTS_DP Normales Verzeichnis in Postorder
FTS_ERR Unspezifische Fehler, siehe fts_errno
FTS_F Normale Datei
FTS_NS Metadaten nicht lesbar fts_statp ist leer, siehe fts_errno
FTS_NSOK Metadaten nicht vorhanden fts_statp ist leer
FTS_SL Symbolische Verknüpfung
FTS_SLNONE Tote symbolische Verknüpfung
FTS_LOGICAL Symbolische Links dereferenzieren
FTS_PHYSICAL Symbolische Links als solche liefern
FTS_COMFOLLOW Symbolischen Links sofort folgen
FTS_NOCHDIR Arbeitsverzeichnis nicht wechseln
FTS_NOSTAT Keine Metadaten lesen (fts_info=FTS_NSOK)
FTS_SEEDOT Verzeichnisse . und .. nicht ignorieren.
FTS_XDEV Dateisystem nicht verlassen
FTS_NAMEONLY Nur die Dateinamen (fts_name)
FTS_AGAIN Eintrag noch einmal besuchen
FTS_FOLLOW Symbolischem Link folgen
FTS_SKIP Unterverzeichnis nicht besuchen

glob.h

Dateinamen im aktuellen Verzeichnis mit Muster abgleichen.

typedef glob_t
size_t gl_pathc Anzahl der Pfade, die auf das Muster passen
char ** gl_pathv Zeiger auf eine Liste von passenden Pfaden
size_t gl_offs Initiale Größe
intglob (const char * pattern,
int flags,
int (* errfunc) (const char * epath, int eerrno),
glob_t * glob)
void globfree (glob_t * glob)
* Joker für beliebig viele Zeichen.
? Joker für ein einzelnes Zeichen.
[…] Joker für ein Zeichen aus einer Menge.
GLOB_APPEND Pfade hinten an eine vorhandene Liste in gl_pathv anhängen.
GLOB_DOOFFS gl_offs freie Plätze am Beginn der Liste reservieren.
GLOB_ERR Abbruch beim ersten Lesefehler.
GLOB_MARK Pfadtrenner an Verzeichnisnamen hängen.
GLOB_NOCHECK Das Muster selbst liefern, wenn kein Pfad auf das Muster passt.
GLOB_NOESCAPE Backslash nicht als Fluchtsymbol interpretieren.
GLOB_NOSORT Pfade nicht alphabetisch sortieren.
GLOB_ABORTED Abbruch wegen Fehler (GLOB_ERR gesetzt oder errfunc liefert Fehlercode).
GLOB_NOMATCH Das Muster passt auf keinen Pfad (GLOB_NOCHECK nicht gesetzt).
GLOB_NOSPACE Fehler beim Reservieren von Speicher.
0 Fehler ignorieren
Abbruch mit GLOB_ABORTED

fnmatch.h

Zeichenkette mit Muster vergleichen.

int fnmatch (const char * pattern, const char * string, int flags)
FNM_NOMATCH Zeichenkette passt nicht auf das Muster.
0 Zeichenkette passt auf das Muster.
FNM_PATHNAME Schrägstriche in der Zeichenkette passen nur auf Schrägstriche im Muster
FNM_PERIOD Führende Punkte in der Zeichenkette müssen genau auf das Muster passen.
FNM_NOESCAPE Backslash nicht als Fluchtsymbol interpretieren.

sys/statvfs.h

Füllstand ermitteln

struct statvfs
unsigned long f_bsize Blockgröße
unsigned long f_frsize Fragmentgröße
fsblkcnt_t f_blocks Anzahl Fragmente im Dateisystem
fsblkcnt_t f_bfree Anzahl freier Blöcke
fsblkcnt_t f_bavail Anzahl freier Blöcke für unprivilegierte Benutzer
fsfilcnt_t f_files Anzahl Inodes
fsfilcnt_t f_ffree Anzahl freier Inodes
fsfilcnt_t f_favail Anzahl freier Inodes für unprivilegierte Benutzer
unsigned long f_fsid Identifikationsnummer
unsigned long f_flag Bitmaske für Flags
unsigned long f_namemax Maximale Länge für Dateinamen
int fstatvfs (int fd, struct statvfs * buf)
int statvfs (const char * path, struct statvfs * buf)
ST_RDONLY Dateisystem ist nur lesbar
ST_NOSUID Dateisystem unterstützt nicht die Semantik von ST_ISUID und ST_ISGID

sys/inotify.h

Linux bietet eine Schnittstelle, um Ereignisse im Dateisystem zu überwachen. Man fügt einem Überwacher-Objekt Pfade hinzu und kann dann mit read aufgetretene Ereignisse auslesen.

struct inotify_event
int wd Pfad-Deskriptor
uint32_t mask Aufgetretene Ereignisse
uint32_t cookie Cookie für zusammen gehörende Ereignisse (rename)
uint32_t len Länge des zusätzlichen Speichers
char name[] Optionaler Speicherplatz für Pfadname
int inotify_init () Liefert Deskriptor für einen neuen Überwacher
int inotify_init1 (int flags)
int inotify_add_watch (int fd, const char * path, uint32_t mask) Fügt einen Pfad hinzu
int inotify_rm_watch (int fd, int wd) Entfernt einen Pfad
IN_NONBLOCK Lesezugriffe nicht blockieren sondern liefern
IN_CLOEXEC Schließt den Dateideskriptor bei exec
IN_CREATE Neu angelegt
IN_OPEN Geöffnet
IN_ACCESS Gelesen oder ausgeführt
IN_ATTRIB Geänderte Zugriffsrechte
IN_CLOSE_WRITE Geschlossen nach Änderung
IN_CLOSE_NOWRITE Geschlossen ohne Änderung
IN_MODIFY Geschrieben
IN_DELETE Gelöscht (Datei im Pfad)
IN_DELETE_SELF Gelöscht (Verzeichnis selbst)
IN_MOVE_SELF Umbenannt (Verzeichnis selbst)
IN_MOVED_FROM Umbenannt (Alter Pfad)
IN_MOVED_TO Umbenannt (Neuer Pfad)

ndbm.h

NDBM stellt eine einfache Name-Wert Datenbank zur Verfügung.

typedef DBM
DBM * dbm_open (const char * path, int oflag, mode_t mode)
void dbm_close (DBM * handle)
int dbm_error (DBM * handle)
int dbm_clearerr (DBM * handle)
typedef datum
void * dptr
size_t dsize
datum dbm_firstkey (DBM * handle)
datum dbm_nextkey (DBM * handle)
datum dbm_fetch (DBM * handle, datum key)
int dbm_delete (DBM * handle, datum key)
int dbm_store (DBM * handle, datum key, datum content, int mode)
O_RDONLY Nur Lesen
O_WRONLY Nur Schreiben
O_RDWR Beides

gdbm.h

Die GNU-Variante GDBM, binden mit -lgdbm

typedef GDBM_FILE
Datenzugriff
GDBM_FILE gdbm_open (const char * path, int block_size, int flags,
int mode, void (* fatal_func) (const char *))
void gdbm_close (GDBM_FILE dbf)
datum gdbm_firstkey (GDBM_FILE dbf)
datum gdbm_nextkey (GDBM_FILE dbf, datum key)
int gdbm_exists (GDBM_FILE dbf, datum key)
int gdbm_store (GDBM_FILE dbf, datum key, datum content, int flag)
datum gdbm_fetch (GDBM_FILE dbf, datum key)
int gdbm_delete (GDBM_FILE dbf, datum key)
Organisation
int gdbm_reorganize (GDBM_FILE dbf)
void gdbm_sync (GDBM_FILE dbf)
int gdbm_setopt (GDBM_FILE dbf, int option, void * value, int size)
int gdbm_fdesc (GDBM_FILE dbf)
int gdbm_count (GDBM_FILE dbf, gdbm_count_t * pcount)
int gdbm_version_cmp (int const a[], int const b[])
char * gdbm_strerror (gdbm_error errno)
Import/Export
int gdbm_import (GDBM_FILE dbf, const char * file, int flag)
int gdbm_import_from_file (GDBM_FILE dbf, FILE * fp, int flag)
int gdbm_export (GDBM_FILE dbf, const char * file, int flag,
int mode)
int gdbm_export_to_file (GDBM_FILE dbf, FILE * fp)
int gdbm_load (GDBM_FILE * dbf, const char * file, int flag,
int meta_mask, unsigned long * errline)
int gdbm_load_from_file (GDBM_FILE * dbf, FILE * fp, int flag,
int meta_mask, unsigned long * errline)
int gdbm_dump (GDBM_FILE dbf, const char * file, int format,
int flags, int mode)
int gdbm_dump_to_file (GDBM_FILE dbf, FILE * fp, int format)
Einer von
GDBM_READER Nur Lesen
GDBM_WRITER Exklusiv Lesen und Schreiben
GDBM_WRCREAT Dito, Datenbank erzeugen
GDBM_NEWDB Dito, Leere Datenbank erzeugen
Optional verordern
GDBM_SYNC Änderungen synchron auf Platte schreiben
GDBM_NOLOCK Nicht für exklusiven Schreibzugriff sperren
GDBM_NOMMAP Memory-Mapping nicht verwenden
GDBM_FAST Standardmäßig gesetzt und damit obsolet
GDBM_CLOEXEC Handle schließen, wenn exec ausgeführt wird
GDBM_REPLACE Eventuell vorhandenen Wert ersetzen
GDBM_INSERT Fehler bei bereits vorhandenem Wert
GDBM_DUMP_FMT_BINARY Binärdatei
GDBM_DUMP_FMT_ASCII Textdatei
GDBM_META_MASK_MODE Zugriffsrechte nicht wiederherstellen
GDBM_META_MASK_OWNER Besitzer nicht wiederherstellen
GDBM_NO_ERROR Kein Fehler
GDBM_MALLOC_ERROR Nicht genügend Heap-Speicher
GDBM_BLOCK_SIZE_ERROR Ungültige Blockgröße
GDBM_FILE_OPEN_ERROR Öffnen der Datei fehlgeschlagen
GDBM_FILE_WRITE_ERROR Schreiben der Datei fehlgeschlagen
GDBM_FILE_SEEK_ERROR Positionierung innerhalb der Datei fehlgeschlagen
GDBM_FILE_READ_ERROR Lesen der Datei fehlgeschlagen
GDBM_BAD_MAGIC_NUMBER Keine GDBM-Datei
GDBM_EMPTY_DATABASE Leere Datei
GDBM_CANT_BE_READER Keine Lesesperre
GDBM_CANT_BE_WRITER Keine Schreibsperre
GDBM_READER_CANT_DELETE Nur Lesezugrff
GDBM_READER_CANT_STORE Kein Schreibzugriff
GDBM_READER_CANT_REORGANIZEKein Schreibzugriff
GDBM_UNKNOWN_UPDATE Reserviert
GDBM_ITEM_NOT_FOUND Schlüssel nicht gefunden
GDBM_REORGANIZE_FAILED Kann keine temporäre Datenbank erzeugen
GDBM_CANNOT_REPLACE Schlüssel nicht ersetzbar
GDBM_ILLEGAL_DATA Fehlerhaftes Datum
GDBM_OPT_ALREADY_SET Option wurde bereits gesetzt
GDBM_OPT_ILLEGAL Ungültige Option
GDBM_BYTE_SWAPPED Falsche Oktektt-Anordnung
GDBM_BAD_FILE_OFFSET Ungültige Dateikennung
GDBM_BAD_OPEN_FLAGS Ungültiger Parameter
GDBM_FILE_STAT_ERROR Kann Dateiinformation nicht lesen
GDBM_FILE_EOF Vorzeitiges Dateiende
GDBM_NO_DBNAME Keine Ausgabedatei
GDBM_ERR_FILE_OWNER Kann Besitzer nicht wiederherstellen
GDBM_ERR_FILE_MODE Kann Zugriffsrechte nicht wiederherstellen
Symbol Oktal Beschreibung
S_IFMT 0170000 Bitmaske für alle Typfelder
S_IFSOCK 0140000 Erzeugt Sockel
S_IFLNK 0120000 Erzeugt Symlink
S_IFREG 0100000 Erzeugt reguläre Datei
S_IFBLK 0060000 Erzeugt Blockgerät
S_IFDIR 0040000 Erzeugt Verzeichnis
S_IFCHR 0020000 Erzeugt Zeichengerät
S_IFIFO 0010000 Erzeugt FIFO
S_ISUID 0004000 Vererbt Benutzernummer
S_ISGID 0002000 Vererbt Gruppennummer an neu angelegte Dateien und Verzeichnisse
S_ISVTX 0001000 Sticky Bit
S_IRWXU 0000700 Besitzer bekommt alle Rechte
S_IRUSR 0000400 Besitzer bekommt Leserechte
S_IWUSR 0000200 Besitzer bekommt Schreibrechte
S_IXUSR 0000100 Besitzer bekommt Ausführrechte
S_IRWXG 0000070 Gruppe bekommt alle Rechte
S_IRGRP 0000040 Gruppe bekommt Leserechte
S_IWGRP 0000020 Gruppe bekommt Schreibrechte
S_IXGRP 0000010 Gruppe bekommt Ausführrechte
S_IRWXO 0000007 Andere bekommen alle Rechte
S_IROTH 0000004 Andere bekommen Leserechte
S_IWOTH 0000002 Andere bekommen Schreibrechte
S_IXOTH 0000001 Andere bekommen Ausführrechte