B.3 Elementare E/A-Funktionen
Die hier vorgestellten Funktionen sind alle zum größten Teil schon im Buch behandelt worden, weshalb hierzu nur die jeweilige Syntax und deren Bedeutung aufgelistet wird. Alle elementare Funktionen sind ungepuffert in der Ein-/Ausgabe und entsprechen dem POSIX- und XPG4-Standard (nicht aber dem von ANSI C).
B.3.1 Limits-Konstanten
In der Headerdatei <limits.h> finden sich häufig noch weitere symbolische Konstanten, welche allerdings nicht vom ANSI C Standard vorgeschrieben – aber von POSIX benötigt werden. Die im Buch angegebenen Mindestwerte liegen gewöhnlich weit unter den Angaben im echten Leben. Die in der Tabelle aufgelisteten Konstanten stellen nur einen Überblick zu den gängigsten Konstanten da.
Tabelle B.26
POSIX-Konstanten in limits.h
Konstante
|
Mindestwert
|
Bedeutung
|
MAX_INPUT
|
255
|
max. Speicherplatz in der Warteschlange der Terminal-Eingabe
|
NGROUPS_MAX
|
0
|
max. Zusatz-Group-ID eines Prozesses
|
PASS_MAX
|
8
|
max. signifikante Anzahl von Bytes für die Passwort-Eingabe (ohne dem Terminierungszeichen)
|
PID_MAX
|
INT_MAX
|
Maximalwert für eine Prozess-ID (PID)
|
UID_MAX
|
ULONG_MAX
|
Maximalwert für Benutzer- oder Gruppen-ID (UID, GID)
|
ARG_MAX
|
4096
|
Maximale Länge (in den Bytes) der Argumente für die exec- Funktion
|
CHILD_MAX
|
6
|
Maximale Anzahl von Kindprozessen pro realer Benutzernummer (reale User-ID).
|
MAX_CANON
|
|
max. Speicherplatz (in Bytes) in der Warteschlange der kanonischen Terminal-Eingabe
|
OPEN_MAX
|
16
|
Maximale Anzahl von Dateien, die pro Prozess geöffnet werden können.
|
NAME_MAX
|
Unbestimmt
|
Maximale Bytezahl für Dateinamen
|
PATH_MAX
|
255
|
Maximale Bytezahl für Pfadnamen
|
LINK_MAX
|
8
|
Maximale Anzahl von Links auf eine Datei
|
PIPE_BUF
|
512
|
Maximale Bytezahl die in eine Pipe geschrieben werden können
|
Weiterhin ist es manchmal nötig, etwas bei der Übersetzung abzufragen, ob etwas definiert ist oder nicht, um anschließend den Übersetzungslauf der Anwendung entsprechend anzupassen. Hierzu sind in der Headerdatei <unistd. h.> einige Konstanten definiert. Wenn eine dieser Konstanten vorhanden ist, bedeutet, dies, dass eine entsprechende Aktion (siehe in der Tabelle die Bedeutung) zutrifft.
Tabelle B.27
Konstanten der Headerdatei unistd. h.
Konstante
|
Bedeutung, wenn definiert
|
_POSIX_SAVED_IDS
|
saved Set-User- und Set-Group-ID wird unterstützt
|
_POSIX_NO_TRUNC
|
ist der Pfadnamen länger als PATH_MAX führt dies zu einem Fehler
|
_POSIX_CHOWN_RESTRICTED
|
chown ist nicht für alle Benutzer erlaubt
|
_POSIX_JOB_CONTROL
|
Jobkontrolle wird unterstützt
|
_POSIX_VERSION
|
Versionsnummer von POSIX.1
|
_POSIX_SOURCE
|
hiermit wird dem Compiler mitgeteilt, dass das Programm absolut POSIX-konform sein soll.
|
_XOPEN_VERSION
|
Versionsnummer von XPG
|
B.3.2 Elementare E/A-Funktionen
Gewöhnlich benötigen Sie zur Verwendung der gleich aufgelisteten Funktionen folgende Headerdateien:
/* Für die Funktionen */
#include <unistd. h.>
/* Für symbolische Konstanten */
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
Tabelle B.28
Elementare E/A-Funktionen mit Filedeskriptoren
Syntax
|
Bedeutung
|
int open( const char *pfadname,
int oflag, ...
/* mode_t modus */ );
|
Datei öffnen
|
int close(int fd);
|
Datei schließen
|
ssize_t read( int fd,
void *puffer,
size_t bytes );
|
Aus Datei lesen
|
ssize_t write( int fd,
void *puffer,
size_t bytes );
|
In Datei schreiben
|
off_t lseek( int fd,
off_t offset,
int wie );
|
Schreib-/Lesezeiger positionieren
|
int dup(int fd);
int dup2(int fd1, int fd2);
|
Filedeskriptoren duplizieren
|
int fcntl( int fd,
int kommando, ...
/* int arg */ );
|
Verändern, abfragen oder Sperren eines offenen Filedeskriptors
|
int fileno( FILE *fz );
|
Aus FILE-Zeiger den Filedeskriptor ermitteln
|
FILE *fdopen(int fd,
const char *modus);
|
Aus Filedeskriptor einen FILE-Zeiger erzeugen
|
|