Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

creat(2)

dup(2)

fcntl(2)

lseek(2)

open(2)

pread(2)

write(2)

unistd(4)

pwrite(2)                                                         pwrite(2)

NAME
     pwrite - Unteilbare Positionierungs- und Schreiboperation

SYNTAX
     #include <unistd.h>

     ssizet pwrite(int dk, const void *buf, sizet nbyte, offt offset);

BESCHREIBUNG
     Der Systemaufruf pwrite() führt eine unteilbare Positionierungs- und
     Schreiboperation durch. Dadurch entfällt die Notwendigkeit eines
     Sperrmechanismus für den Fall, daß sowohl eine Positionierungs- als
     auch eine Schreiboperation erforderlich ist und Dateideskriptoren
     gemeinsam verwendet werden. pwrite() ist analog zu write(), akzeptiert
     jedoch ein viertes Argument, offset. Die Schreiboperation erfolgt so,
     als wäre zuvor der Systemaufruf lseek() bis offset (vom Dateianfang
     aus) ausgeführt worden. Beachten Sie jedoch, daß der Systemaufruf
     lseek() nicht wirklich ausgeführt wird (obwohl die Semantik analog
     ist). pwrite() hat keinen Einfluß auf den Dateizeiger. Die nächsten
     nbyte Bytes werden dann, angefangen beim angegebenen Offset, gelesen.

     Die Unteilbarkeit der Positionierungs- und Schreiboperation bei
     pwrite() ermöglicht es Prozessen und Threads, die Dateideskriptoren
     gemeinsam verwenden, in eine gemeinsam verwendete Datei an einer
     bestimmten Position zu schreiben, ohne daß hierfür ein Sperrmechanis-
     mus erforderlich ist. Ein solcher Mechanismus wäre erforderlich, um
     dasselbe Ergebnis über die getrennt ausgeführten Systemaufrufe lseek()
     und write() zu erzielen. Die Unteilbarkeit der Positionierungs- und
     Schreiboperation ist erforderlich, da der Dateizeiger gemeinsam ver-
     wendet wird und ein Thread den Zeiger möglicherweise mit lseek() ver-
     schiebt, nachdem ein anderer Prozeß einen Systemaufruf lseek() ausge-
     führt hat, aber bevor write() ausgeführt wurde.

RÜCKGABEWERT
     Bei erfolgreicher Beendigung gibt pwrite() die Anzahl Bytes zurück,
     die tatsächlich aus buf gelesen wurden. Andernfalls wird der Wert -1
     und ein Fehler zurückgegeben.

FEHLER
     Die folgenden Beschreibungen der Fehlercodes sind funktionsspezifisch.
     Eine allgemeingültige Beschreibung finden Sie in introprm2(2) bzw. in
     errno(5).

     Unter folgenden Bedingungen schlägt pwrite() fehlt und setzt errno auf
     den angegebenen Wert:

     EAGAIN   Obligatorisches Sperren von Dateien und Dateisätzen ist
              gesetzt, ONDELAY oder ONONBLOCK ist gesetzt, und eine blok-
              kierende Datensatzsperre ist vorhanden.

     EAGAIN   Der Systemspeicher, der für "raw"-Ein-/Ausgabe zur Verfügung
              steht, ist vorübergehend nicht ausreichend.



Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

pwrite(2)                                                         pwrite(2)

     EAGAIN   Es wurde versucht, in einen Stream zu schreiben, der bei
              gesetztem Anzeiger ONDELAY oder ONONBLOCK keine Daten
              akzeptieren kann.

     EAGAIN   Es wurde versucht, einen pwrite-Auftrag von PIPEBUF Bytes
              oder weniger auf eine Pipe oder FIFO-Datei zu geben, und es
              waren weniger als nbyte freier Speicherbereich vorhanden.

     EBADF    dk ist kein gültiger Dateideskriptor für eine zum Schreiben
              geöffnete Datei.

     EDEADLK  Die pwrite()-Funktion schläft und löst dadurch einen Deadlock
              aus.

     EFAULT   buf weist über den zugewiesenen Adreßraum des Prozesses hin-
              aus.

     EFBIG    Es wurde versucht, in eine Datei zu schreiben, die über die
              zulässige Grenze für den Prozeß oder die maximale Dateigröße
              des Prozesses hinausgeht [siehe getrlimit(2) und ulimit(2)].

     EINTR    Ein Signal wurde während des Systemaufrufs pwrite() abgefan-
              gen.

     EINVAL   Es wurde versucht, in einen Stream zu schreiben, der an einen
              Multiplexer angeschlossen ist.

     EIO      Der Prozeß ist im Hintergrund und versucht, auf sein steuern-
              des Terminal zu schreiben, dessen TOSTOP-Option gesetzt ist;
              der Prozeß ignoriert weder SIGTTOU-Signale, noch blockiert er
              sie, und seine Prozeßgruppe ist verwaist.

     ENOLCK   Die System-Datensatzsperren-Tabelle war voll, und daher kann
              die pwrite()-Funktion erst schlafen, wenn die blockierende
              Datensatzsperre aufgehoben wird.

     ENOLINK  dk ist auf einem fernen Rechner, und die Verbindung zu diesem
              Rechner ist nicht mehr aktiv.

     ENOSR    Es wurde versucht, auf einen Stream mit ungenügend STREAMS-
              Speicherplatz im System zu schreiben.

     ENOSPC   Während eines pwrite() in eine normale Datei ist kein freier
              Speicher mehr auf dem Rechner.

     ENXIO    Ein Hangup ist aufgetreten, während in den Stream geschrieben
              wird.

     EPIPE    Es wurde versucht, in eine Pipeline oder FIFO-Datei zu
              schreiben, die nicht zum Lesen oder nur an einem Ende geöff-
              net ist. Ein SIGPIPE-Signal wird an den Prozeß gesendet.



Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

pwrite(2)                                                         pwrite(2)

     ERANGE   Es wurde versucht, in einen Stream mit nbyte außerhalb der
              vorgegebenen Mindest- und Höchstgrenzen zu schreiben, und der
              Mindestwert ist ungleich Null.

     ENOLCK   Erzwungenes Satzsperren war erlaubt, und keine weiteren
              Dateisatzsperren stehen zur Verfügung (zuviele Dateisegmente
              gesperrt), weil das Maximum des Systems überschritten wurde.

SIEHE AUCH
     creat(2), dup(2), fcntl(2), lseek(2), open(2), pread(2), write(2),
     unistd(4).











































Seite 3                      Reliant UNIX 5.44               Gedruckt 11/98

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