Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

printf(3S)

lfs(5)

stdarg(5)

stdio(5)

wchar(5)

vprintf(3S)                                                     vprintf(3S)

NAME
     vprintf, vfprintf, vsprintf, vwprintf, vfwprintf, vswprintf - Forma-
     tierte Ausgabe einer variablen Argumentliste

SYNTAX
     #include <stdio.h>
     #include <stdarg.h>
     #include <wchar.h>

     int vprintf(const char *format, valist ap);

     int vfprintf(FILE *stream, const char *format, valist ap);

     int vsprintf(char *s, const char *format, valist ap);

     int vwprintf(const wchart *format, valist ap);

     int vfwprintf(FILE *stream, const wchart *format, valist ap);

     int vswprintf(wchart *s, sizet n, const wchart *format, valist ap);

BESCHREIBUNG
     vprintf(), vfprintf() und vsprintf() sind funktionsgleich mit
     printf(), fprintf() und sprintf(), werden aber anstatt mit einer
     variablen Reihe von Argumenten mit einer in der Include-Datei stdarg.h
     definierten Argumentliste aufgerufen.

     Die Funktionen vwprintf(), vfwprintf() und vswprintf() entsprechen den
     Funktionen swprintf(), fwprintf() bzw. swprintf(), wobei die variable
     Argumentliste durch ap ersetzt wird. ap sollte vom Makro vastart (und
     möglicherweise nachfolgenden vaarg-Aufrufen) initialisiert worden
     sein. Diese Funktionen rufen nicht das Makro vaend auf.

     Da die Funktionen vfwprintf(), vswprintf() und vwprintf() das Makro
     vaarg aufrufen, ist der Wert von ap nach der Rückkehr unbestimmt.

     Die Include-Datei stdarg.h definiert den Typ valist und eine Menge
     von Makros, um eine Liste von Argumenten unterschiedlicher Anzahl und
     Typen durchgehen zu können. Das Argument ap ist vom Typ valist. Die-
     ses Argument wird zusammen mit den Makros vastart, vaarg und vaend
     aus der Include-Datei stdarg.h verwendet [siehe stdarg(5)].

BEISPIELE
     Der folgende Programmausschnitt veranschaulicht die Verwendung von
     vfprintf() zum Schreiben einer error-Routine:

     #include <stdio.h>
     #include <stdarg.h>
     /*
      * error should be called like
      *         error(functionname, format, arg1, ...);
     */



Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

vprintf(3S)                                                     vprintf(3S)

     void error(char *functionname, char *format, ...)

     {
         valist ap;

         vastart(ap, format);
         /* print out name of function causing error */
         (void) fprintf(stderr, "ERR in %s: ", functionname);
         vaarg(ap, char*);
         /* print out remainder of message */
         (void) vfprintf(stderr, format, ap);
         vaend(ap);
         (void) abort;
     }

     Das folgende Beispiel zeigt die Verwendung der Funktion vfwprintf() in
     einer allgemeinen Fehlerberichtsroutine.

     #include <stdarg.h>
     #include <stdio.h>
     #include <wchar.h>

     void error(char *functionname, wchart *format, ...)
     {
         valist ap;

         vastart(ap, format);
         /* print out name of function causing error */
         fwprintf(stderr, L"ERROR in %s: ", functionname);
         /* print out remainder of message */
         vfwprintf(stderr, format, ap);
         vaend(ap);
     }

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    Das Flag ONONBLOCK für den Dateideskriptor, der stream
               zugrundeliegt, ist gesetzt, und der Prozeß wurde beim
               Schreibvorgang verzögert.

     EBADF     Der Dateideskriptor, der stream zugrundeliegt, ist kein gül-
               tiger Dateideskriptor, der zum Schreiben geöffnet ist.





Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

vprintf(3S)                                                     vprintf(3S)

     EFBIG     Es wurde versucht, in eine Datei zu schreiben, deren Größe
               die maximale Dateigröße oder die maximale Dateigröße des
               Prozesses überschreitet.

     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     Infolge eines Signals wurde die Schreiboperation beendet,
               und es wurden keine Daten übertragen.

     EIO       Ein physischer Ein-/Ausgabefehler ist aufgetreten, oder der
               Prozeß gehört zu einer Hintergrundprozeßgruppe, welche auf
               das kontrollierende Terminal zu schreiben versucht. TOSTOP
               ist gesetzt, weder ignoriert noch blockiert der Prozeß
               SIGTTOU, und die Prozeßgruppe des Prozesses ist verwaist.
               Dieser Fehler kann auch unter implementationsabhängigen
               Bedingungen gemeldet werden.

     ENOSPC    Es war kein freier Platz auf dem Gerät, das die Datei ent-
               hält, mehr übrig.

     EPIPE     Es wurde versucht, auf eine Pipe oder FIFO zu schreiben, die
               für keinen Prozeß leseberechtigt ist. Es wird auch ein Sig-
               nal SIGPIPE zum Prozeß gesendet.

     Die Funktion kann fehlschlagen, falls:

     EILSEQ    Ein Wide-Character-Code, dem kein gültiges Zeichen ent-
               spricht, wurde entdeckt.

     EINVAL    Es sind nicht genügend Argumente vorhanden.

     ENOMEM    Es ist nur unzureichend Speicherplatz vorhanden.

     ENXIO     Es wurde eine Anforderung an ein nicht-existierendes Gerät
               gemacht bzw. die Anforderung ist außerhalb der Möglichkeiten
               des Geräts.

RÜCKGABEWERTE
     vprintf() und vfprintf() geben die Anzahl der übertragenen Zeichen
     oder, wenn ein Fehler aufgetreten ist, -1 zurück.

     Die Funktionen vwprintf() und vfwprintf() geben die Anzahl der über-
     tragenen Wide-Characters oder, wenn ein Ausgabefehler aufgetreten ist,
     einen negativen Wert zurück.

     Die Funktion vswprintf() gibt die Anzahl der in den Array geschriebe-
     nen Wide-Characters zurück, ohne abschließendes Null-Wide-Character
     Wenn n oder mehr Wide-Characters generiert werden sollten, wird ein
     negativer Wert zurückgegeben.



Seite 3                      Reliant UNIX 5.44               Gedruckt 11/98

vprintf(3S)                                                     vprintf(3S)

HINWEISE
     Nach der Verwendung dieser Funktionen sollten Sie das Makro vaend(ap)
     aufrufen, um den Zeiger ap wieder auf einen definierten Wert zu set-
     zen, so daß eventuell nachfolgende Aufrufe dieser Funktionen korrekte
     Startwerte haben.

SIEHE AUCH
     printf(3S), lfs(5), stdarg(5), stdio(5), wchar(5).














































Seite 4                      Reliant UNIX 5.44               Gedruckt 11/98

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026