aio_write oder aio_write64 -Subroutine

Die Subroutine aio_write enthält Informationen für die Subroutine POSIX AIO aio_write (wie in IEEE std 1003.1-2001definiert) und die Subroutine Legacy AIO aio_write.

POSIX AIO-Subroutine aio_write

Zweck

Schreibt asynchron in eine Datei.

Bibliothek

Standard-C-Bibliothek (libc.a)

Syntax

#include <aio.h>

int aio_write (aiocbp)
struct aiocb *aiocbp;

Beschreibung

Die Subroutine aio_write schreibt aio_nbytes in die Datei, die aio_fildes zugeordnet ist, aus dem Puffer, auf den aio_bufverweist. Die Subroutine kehrt zurück, wenn die Schreibanforderung eingeleitet oder in die Datei oder Einheit eingereiht wurde.

Der Parameter aiocbp kann als Argument für die Subroutinen aio_error und aio_return verwendet werden, um den Fehlerstatus bzw. Rückgabestatus der asynchronen Operation zu bestimmen, während sie fortgesetzt wird.

Der Parameter aiocbp verweist auf eine aiocb -Struktur. Wenn der Puffer, auf den aio_buf verweist, oder der Steuerblock, auf den aiocbp verweist, vor der asynchronen E/A-Beendigung zu einer unzulässigen Adresse wird, ist das Verhalten nicht definiert.

Wenn das Flag O_APPEND für den Dateideskriptor aio_fildes nicht gesetzt ist, findet die angeforderte Operation an der durch aio_offsetangegebenen absoluten Position in der Datei statt. Dies geschieht so, als wäre die Subroutine lseek unmittelbar vor der Operation mit einem Offset gleich aio_offset und einem whence gleich SEEK_SETaufgerufen worden. Wenn das Flag O_APPEND für den Dateideskriptor gesetzt ist, hängen Schreiboperationen Daten in Byte in derselben Reihenfolge an die Datei an, in der die Aufrufe abgesetzt wurden, außer unter den im Abschnitt "Asynchrone E/A" auf der Website System Interfaces and XBD Headers beschriebenen Umständen. Nach einem erfolgreichen Aufruf zum Einreihen einer asynchronen E/A-Operation ist der Wert der relativen Dateiadresse für die Datei nicht angegeben.

Das Feld aio_lio_opcode wird von der Subroutine aio_write ignoriert.

Wenn die priorisierte Ein-/Ausgabe für diese Datei unterstützt wird, wird die asynchrone Operation mit einer Priorität übergeben, die der Ausführungspriorität des Prozesses minus aiocbp->aio_reqprioentspricht.

Gleichzeitige asynchrone Operationen, die dieselben aiocbp verwenden, führen zu nicht definierten Ergebnissen.

Wenn die synchronisierte Ein-/Ausgabe für die Datei aktiviert ist, die aio_fildeszugeordnet ist, entspricht das Verhalten dieser Subroutine den Definitionen für den Abschluss der synchronisierten E/A-Datenintegrität und den Abschluss der synchronisierten E/A-Dateiintegrität.

Für jede Systemaktion, die den Prozessspeicherbereich ändert, während eine asynchrone Ein-/Ausgabe aussteht, ist das Ergebnis dieser Aktion nicht definiert.

Bei regulären Dateien erfolgt keine Datenübertragung über den in der Beschreibung der offenen Datei, die aio_fildeszugeordnet ist, festgelegten maximalen Offset hinaus.

Wenn Sie die Subroutine aio_write oder aio_write64mit einem Dateideskriptor verwenden, der aus einem Aufruf der Subroutine shm_open abgerufen wurde, schlägt sie mit EINVALfehl.

Parameter

Element Beschreibung
aiocbp Verweist auf die aiocb -Struktur, die der E/A-Operation zugeordnet ist

aiocb-struktur

Die aiocb -Struktur wird in der Datei /usr/include/aio.h definiert und enthält die folgenden Member:
int               aio_fildes
off_t             aio_offset
char             *aio_buf
size_t            aio_nbytes
int               aio_reqprio
struct sigevent   aio_sigevent
int               aio_lio_opcode

Ausführungsumgebung

Die Subroutinen aio_write und aio_write64 können nur von der Prozessumgebung aufgerufen werden.

Rückgabewerte

Die Subroutine aio_write gibt eine 0 an den aufrufenden Prozess zurück, wenn die E/A-Operation erfolgreich in die Warteschlange gestellt wurde. Andernfalls wird -1 zurückgegeben, und die globale Variable errno wird gesetzt, um den Fehler anzuzeigen.

Fehlercodes

Element Beschreibung
EAGAIN Die angeforderte asynchrone E/A-Operation wurde aufgrund von Einschränkungen der Systemressourcen nicht in die Warteschlange gestellt.
Jede der folgenden Bedingungen kann synchron oder asynchron beim Aufruf von aio_writeerkannt werden. Wenn eine der folgenden Bedingungen synchron erkannt wird, gibt das Unterprogramm aio_write eine -1 zurück und setzt die globale Variable errno auf den entsprechenden Wert. Wird eine der nachstehenden Bedingungen asynchron festgestellt, wird der Rückgabestatus der asynchronen Operation auf -1 und der Fehlerstatus der asynchronen Operation auf den entsprechenden Wert gesetzt.
Element Beschreibung
EBADF Der Parameter aio_fildes ist kein gültiger Dateideskriptor, der zum Schreiben geöffnet ist.
EINVAL Der durch aio_offset implizierte Wert für den Dateioffset ist ungültig, aio_reqprio ist ein ungültiger Wert oder aio_nbytes ist ein ungültiger Wert. Die Subroutine aio_write oder aio_write64 wurde mit einem Dateideskriptor verwendet, der aus dem Aufruf der Subroutine shm_open abgerufen wurde.
Wenn die Subroutine aio_write die E/A-Operation erfolgreich in die Warteschlange stellt, ist der Rückgabestatus der asynchronen Operation einer der Werte, die normalerweise vom Aufruf der Subroutine write zurückgegeben werden. Wenn die Operation erfolgreich in die Warteschlange gestellt wird, aber anschließend abgebrochen wird oder ein Fehler auftritt, enthält der Fehlerstatus für die asynchrone Operation einen der Werte, die normalerweise durch den Aufruf der Subroutine write festgelegt werden, oder einen der folgenden Werte:
Element Beschreibung
EBADF Der Parameter aio_fildes ist kein gültiger Dateideskriptor, der zum Schreiben geöffnet ist.
EINVAL Der von aio_offset implizierte Dateioffsetwert wäre ungültig.
ABGEBROCHEN Die angeforderte Ein-/Ausgabe wurde abgebrochen, bevor die Ein-/Ausgabe aufgrund einer aio_cancel -Anforderung beendet wurde.
Die folgende Bedingung kann synchron oder asynchron erkannt werden:
Element Beschreibung
EFBIG Die Datei ist eine reguläre Datei, aio_nbytes ist größer als 0 und der Anfangsoffset in aio_offset ist größer-gleich dem Offset-Maximum in der offenen Dateibeschreibung, die aio_fildeszugeordnet ist.

Traditionelle AIO-Subroutine aio_write

Zweck: Schreibt asynchron in eine Datei.

Bibliothek (traditionelle AIO-Subroutine aio_write)

Standard-C-Bibliothek (libc.a)

Syntax (traditionelle AIO-Subroutine aio_write)

#include <aio.h>
int aio_write( FileDescriptor,  aiocbp)
int FileDescriptor;
struct aiocb *aiocbp;
int aio_write64( FileDescriptor,  aiocbp)
int FileDescriptor;
struct aiocb64 *aiocbp;

Beschreibung (traditionelle AIO-Subroutine aio_write)

Die Subroutine aio_write schreibt asynchron in eine Datei. Insbesondere schreibt die Subroutine aio_write aus einem Puffer in die Datei, die dem Parameter FileDescriptor zugeordnet ist. Um dies zu handhaben, verwendet die Subroutine Informationen aus der Struktur aio control block (aiocb) , auf die der Parameter aiocbp verweist. Diese Informationen umfassen die folgenden Felder:

Element Beschreibung
aio_buf Gibt den zu verwendenden Puffer an
aio_nbytes Gibt die Anzahl der zu schreibenden Byte an.

Die Subroutine aio_write64 ähnelt der Subroutine aio_write mit der Ausnahme, dass sie einen Referenzparameter aiocb64 verwendet. Auf diese Weise kann die Subroutine aio_write64 Offsets angeben, die über OFF_MAX (2 Gigabyte minus 1) hinausgehen.

In der Programmierumgebung mit Unterstützung für große Dateien wird aio_read als aio_read64neu definiert.

Wenn Sie die Subroutine aio_write oder aio_write64 mit einem Dateideskriptor verwenden, der aus einem Aufruf der Subroutine shm_open abgerufen wurde, schlägt sie mit EINVALfehl.

Wenn die Schreibanforderung in die Warteschlange gestellt wurde, aktualisiert die Subroutine aio_write den Dateizeiger, der durch dieaio_whenceundaio_offsetFelder in der aiocb -Struktur so, als wäre die angeforderte Ein-/Ausgabe abgeschlossen. Anschließend kehrt er zum aufrufenden Programm zurück. Deraio_whenceundaio_offsetFelder haben dieselbe Bedeutung wie die Parameter whence und offset in der Subroutine lseek . Die Subroutine ignoriert sie für Dateiobjekte, die nicht suchen können.

Wenn während des Aufrufs ein Fehler auftritt, wird die Schreibanforderung nicht eingeleitet oder in die Warteschlange gestellt. Verwenden Sie die Subroutine aio_error , um den Status einer Anforderung zu bestimmen.

Damit der aufrufende Prozess das Signal SIGIO empfängt, wenn die E/A-Operation abgeschlossen ist, setzen Sie das Bit AIO_SIGNAL in deraio_flagFeld in der aiocb -Struktur.

Hinweis: Die Struktur event in der Struktur aiocb wird derzeit nicht verwendet, ist aber aus Gründen der zukünftigen Kompatibilität enthalten.
Anmerkung: Das Makro _AIO_AIX_SOURCE, das in aio.h verwendet wird, muss definiert werden, wenn aio.h zum Kompilieren einer aio-Anwendung mit den traditionellen AIO-Funktionsdefinitionen verwendet wird. Die Standardkompilierung unter Verwendung der Datei aio.h gilt für eine Anwendung mit den POSIX -AIO-Definitionen. Geben Sie in der Quellendatei Folgendes ein:
#define _AIO_AIX_SOURCE
#include <sys/aio.h>
Geben Sie in der Befehlszeile bei der Kompilierung Folgendes ein:
->xlc ... -D_AIO_AIX_SOURCE ... legacy_aio_program.c 

Da priorisierte Ein-/Ausgabe derzeit nicht unterstützt wird, wird das Feld aio_reqprio der Struktur derzeit nicht verwendet.

Parameter (traditionelle AIO-Subroutine aio_write)

Element Beschreibung
FileDescriptor Gibt das zu schreibende Objekt an, das von einem Aufruf zum Öffnen zurückgegeben wurde.
aiocbp Verweist auf die asynchrone E/A-Steuerblockstruktur, die der E/A-Operation zugeordnet ist.

aiocb-struktur

Die aiocb -Struktur wird in der Datei /usr/include/aio.h definiert und enthält die folgenden Member:
struct aiocb
{
       int                 aio_whence;
       off_t               aio_offset;
       char                *aio_buf;
       ssize_t             aio_return;
       int                 aio_errno;
       size_t              aio_nbytes;
       union {
              int          reqprio;
              struct {
                     int   version:8;
                     int   priority:8;
                     int   cache_hint:16;
              } ext;
       } aio_u1;
       int                 aio_flag;
       int                 aio_iocpfd;
       aio_handle_t        aio_handle;
}

#define aio_reqprio        aio_u1.reqprio
#define aio_version        aio_u1.ext.version
#define aio_priority       aio_u1.ext.priority
#define aio_cache_hint     aio_u1.ext.cache_hint

Ausführungsumgebung (traditionelle AIO-Subroutine aio_write)

Die Subroutinen aio_write und aio_write64 können nur von der Prozessumgebung aufgerufen werden.

Rückgabewerte (traditionelle AIO-Subroutine aio_write)

Wenn die Schreibanforderungswarteschlange erfolgreich ist, gibt die Subroutine aio_write den Wert 0 zurück. Andernfalls gibt es den Wert -1 zurück und setzt die globale Variable errno, um den Fehler zu identifizieren.

Rückgabecodes können auf die folgenden errno -Werte gesetzt werden:

Element Beschreibung
EAGAIN Gibt an, dass die Systemressourcen, die für die Warteschlange der Anforderung erforderlich sind, nicht verfügbar sind. Insbesondere kann die Übertragungswarteschlange voll sein oder die maximale Anzahl Öffnungsvorgänge erreicht sein.
EBADF Gibt an, dass der Parameter FileDescriptor nicht gültig ist.
EFAULT Gibt an, dass die mit dem Parameter aiocbp angegebene Adresse ungültig ist.
EINVAL Gibt an, dass dieaio_whenceFeld hat keinen gültigen Wert oder der Ergebniszeiger ist ungültig. Die Subroutine aio_write oder aio_write64 wurde mit einem Dateideskriptor verwendet, der aus dem Aufruf der Subroutine shm_open abgerufen wurde.

Bei Verwendung von I/O Completion Ports mit AIO-Anforderungen können Rückgabecodes auch auf die folgenden errno-Werte gesetzt werden:

Element Beschreibung
EBADF Gibt an, dass dieaio_iocpfdFeld in der aiocb-Struktur ist kein gültiger Dateideskriptor für I/O Completion Port.
EINVAL Zeigt an, dass ein I/O Completion Port-Service beim Versuch, die AIO-Anforderung zu starten, fehlgeschlagen ist.
EPERM Gibt an, dass die I/O Completion Port-Services nicht verfügbar sind.

Hinweis: Andere in der Datei /usr/include/sys/errno.h definierte Fehlercodes können von der Subroutine aio_error zurückgegeben werden, wenn während der E/A-Operation ein Fehler auftritt.