putc(3S) putc(3S)
NAME
putc, putchar, fputc, putw - Zeichen/Wort auf einen Stream ausgeben
SYNTAX
#include <stdio.h>
int putc(int c, FILE *stream);
int putchar(int c);
int fputc(int c, FILE *stream);
int putw(int w, FILE *stream);
BESCHREIBUNG
putc() schreibt das Byte c (umgeformt zu einem unsigned char) in die
Ausgabedatei stream an die Stelle, auf die der Schreib-/Lesezeiger,
sofern er definiert ist, zeigt und positioniert den Schreib-/Lese-
zeiger an die entsprechende Stelle. Wenn die Datei Positionierungsan-
forderungen nicht unterstützt, oder wenn stream mit dem Modus für
Anhängen (Append) geöffnet wurde, wird das Byte an das Ende der Aus-
gabe angehängt. putchar(c) ist als putc(c, stdout) definiert. putc()
und putchar() sind Makros.
fputc() verhält sich wie putc(), ist jedoch eine Funktion und kein
Makro. fputc() läuft langsamer als putc(), beansprucht jedoch weniger
Speicherplatz pro Aufruf, und der Name kann als Argument an eine Funk-
tion übergeben werden.
putw() schreibt das Wort (int) w in die Ausgabedatei stream, auf die
der Schreib-/Lesezeiger, sofern definiert, zeigt. Die Größe eines
Worts ist die maschinenspezifische Größe von int. putw() setzt keine
besondere Ausrichtung in der Datei voraus und bewirkt diese auch
nicht.
FEHLER
Die folgenden Beschreibungen der Fehlercodes sind funktionsspezifisch.
Eine allgemeingültige Beschreibung finden Sie in introprm2(2) bzw. in
errno(5).
Die Funktion schlägt fehl, wenn entweder der Datenstrom nicht gepuf-
fert ist oder der Puffer des Datenstroms geleert werden mußte; ferner
wenn:
EAGAIN Für den Dateideskriptor ist das ONONBLOCK-Flag gesetzt, und
der Prozeß wird beim Schreiben verzögert.
EBADF Der Dateideskriptor, der sich auf stream bezieht, ist kein
für das Schreiben gültiger Dateideskriptor.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
putc(3S) putc(3S)
EFBIG Es wurde versucht, in eine Datei zu schreiben, wobei die
maximale Dateigröße oder die durch den Prozeß vorgegebene
Dateigröße überschritten wurde.
EFBIG Die Datei ist eine reguläre Datei, und es wurde versucht,
bis hin oder über den maximalen Offset hinaus zu schreiben,
der dem entsprechenden Datenstrom zugeordnet ist.
EINTR Das Schreiben wurde durch den Empfang eines Signals unter-
brochen, und es wurden keine Daten übertragen.
EIO Ein physischer Ein-/Ausgabe-Fehler ist aufgetreten, oder der
Prozeß gehört zu einer Prozeßgruppe im Hintergrund und ver-
sucht, auf sein Steuerungsterminal zu schreiben. TOSTOP ist
gesetzt, SIGTTOU wird vom Prozeß weder ignoriert noch blok-
kiert, und die Prozeßgruppe des Prozesses ist verwaist. Die-
ser Fehler kann auch abhängig von der jeweiligen Implemen-
tierung auftreten.
ENOSPC Es ist kein freier Platz auf dem Datenträger mehr vorhanden.
EPIPE Es wurde versucht, in eine Pipe oder FIFO-Datei zu schrei-
ben, die nicht zum Lesen geöffnet ist. Ein SIGPIPE-Signal
wird an den Prozeß gesendet.
Die Funktion fputc() schlägt bei folgenden Bedingungen fehl:
ENOMEM Nicht genügend Speicherplatz verfügbar.
ENXIO Es liegt eine Anforderung eines nicht vorhandenen Geräts
vor, oder die Anforderung ging über die Leistungsgrenzen des
Gerätes hinaus.
ERGEBNIS
Wenn diese Funktionen erfolgreich sind, gibt jede den von ihr
geschriebenen Wert zurück (mit Ausnahme von putw()). putw() gibt
ferror(stream) zurück. Andernfalls geben sie die Konstante EOF zurück.
Dieses Verhalten tritt zum Beispiel auf, wenn die Datei stream nicht
zum Schreiben geöffnet ist, oder wenn die Ausgabedatei nicht mehr ver-
größert werden kann.
HINWEISE
Da putc() als Makro implementiert ist, kann stream mehr als einmal
ausgewertet werden. Falls stream also ein Ausdruck mit Nebeneffekten
ist, wird er von putc() nicht korrekt verarbeitet. Insbesondere
putc(c, *f++) verhält sich nicht wie erwartet. Verwenden Sie in diesem
Fall fputc().
Aufgrund der möglichen Unterschiede in Wortlänge und Bytefolge sind
die unter Verwendung von putw() geschriebenen Dateien maschinenabhän-
gig und können möglicherweise nicht mit getw() auf einem anderen Pro-
zessor gelesen werden.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
putc(3S) putc(3S)
Funktionen existieren für alle oben definierten Makros. Um die ent-
sprechende Funktion aufzurufen, muß der Makroname undefiniert sein
(z. B. durch #undef putc).
SIEHE AUCH
exit(2), lseek(2), write(2), abort(3C), fclose(3S), ferror(3S),
fopen(3S), fread(3S), printf(3S), puts(3S), setbuf(3S), stdio(3S),
lfs(5), stdio(5).
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98