Subroutine aio_fsync

Zweck

Synchronisiert asynchrone Dateien.

Bibliothek

Standard-C-Bibliothek (libc.a)

Syntax

#include <aio.h>

int aio_fsync (op, aiocbp)
int op;
struct aiocb *aiocbp;

Beschreibung

Die Subroutine aio_fsync zwingt asynchron alle E/A-Operationen zum Abschluss der synchronisierten Ein-/Ausgabe. Der Funktionsaufruf wird zurückgegeben, wenn die Synchronisationsanforderung eingeleitet oder in die Datei oder Einheit eingereiht wurde (auch wenn die Daten nicht sofort synchronisiert werden können).

Wenn der Parameter op auf O_DSYNC gesetzt ist, werden alle derzeit in der Warteschlange befindlichen E/A-Operationen wie durch einen Aufruf der Subroutine fdatasync ausgeführt. Wenn der Parameter op auf O_SYNC gesetzt ist, werden alle derzeit eingereihten E/A-Operationen wie durch einen Aufruf der Subroutine fsync abgeschlossen. Wenn die Subroutine aio_fsync fehlschlägt oder wenn die von aio_fsync in die Warteschlange gestellte Operation fehlschlägt, kann nicht garantiert werden, dass ausstehende E/A-Operationen abgeschlossen werden.

Wenn aio_fsync erfolgreich ist, wird nur die Ein-/Ausgabe, die zum Zeitpunkt des Aufrufs von aio_fsync in die Warteschlange gestellt wurde, garantiert in den relevanten Beendigungsstatus versetzt. Die Beendigung der nachfolgenden Ein-/Ausgabe für den Dateideskriptor ist nicht garantiert, dass sie synchronisiert ausgeführt wird.

Der Parameter aiocbp bezieht sich auf einen asynchronen E/A-Steuerblock. Der Wert 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. Wenn die Anforderung in die Warteschlange gestellt wird, lautet der Fehlerstatus für die Operation EINPROGRESS. Wenn alle Daten erfolgreich übertragen wurden, wird der Fehlerstatus zurückgesetzt, um den Erfolg oder das Fehlschlagen der Operation wiederzugeben. Wenn die Operation nicht erfolgreich abgeschlossen wird, wird der Fehlerstatus für die Operation auf den Fehler gesetzt. Das Member aio_sigevent legt die asynchrone Benachrichtigung fest, die erfolgen soll, wenn alle Operationen den synchronisierten E/A-Abschluss erreicht haben. Alle anderen Member der Struktur, auf die der Parameter aiocbp verweist, werden ignoriert. Wenn der von aiocbp referenzierte Steuerblock vor der asynchronen Ein-/Ausgabeausführung zu einer unzulässigen Adresse wird, ist das Verhalten nicht definiert.

Wenn die Subroutine aio_fsync fehlschlägt oder aiocbp eine Fehlerbedingung anzeigt, wird nicht garantiert, dass die Daten erfolgreich übertragen wurden.

Parameter

Element Beschreibung
op Bestimmt, wie alle derzeit in die Warteschlange eingereihten E/A-Operationen ausgeführt werden.
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_error und aio_error64 können nur über die Prozessumgebung aufgerufen werden.

Rückgabewerte

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

Fehlercodes

Element Beschreibung
EAGAIN Die angeforderte asynchrone Operation wurde aufgrund von temporären Ressourcenbeschränkungen nicht in die Warteschlange gestellt.
EBADF Das Member aio_fildes der aiocb -Struktur, auf die der Parameter aiocbp verweist, ist kein gültiger Dateideskriptor, der zum Schreiben geöffnet ist.

Falls eine der E/A-Operationen in der Warteschlange fehlschlägt, gibt die Subroutine aio_fsync die Fehlerbedingung zurück, die für die Subroutinen read und write definiert ist. Der Fehler wird im Fehlerstatus für die asynchrone Subroutine fsync zurückgegeben, die mit der Subroutine aio_error abgerufen werden kann.