RoarAudio/Programmieren/VIO: Unterschied zwischen den Versionen

Aus UUGRN
K (→‎roar_vio_read(): +beschreibung)
(→‎Auf VIO Objekt operieren: beschreibungen der basis funktionen.)
Zeile 40: Zeile 40:
 
Prototyp:
 
Prototyp:
 
  ssize_t roar_vio_write  (struct roar_vio_calls * vio, void *buf, size_t count);
 
  ssize_t roar_vio_write  (struct roar_vio_calls * vio, void *buf, size_t count);
 +
 +
Diese Funktion versucht ''count'' Bytes aus dem Puffer ''buf'' nach ''vio'' zu schreiben.
 +
 +
Es wird die Anzahl wirklich geschriebenen Byte zurück gegeben.
 +
 +
Beispiel:
 +
ret = roar_vio_read(&vio, datablock, 512);
 +
 +
Siehe auch: write(2)
  
 
=== roar_vio_lseek() ===
 
=== roar_vio_lseek() ===
 
Prototyp:
 
Prototyp:
 
  off_t  roar_vio_lseek  (struct roar_vio_calls * vio, off_t offset, int whence);
 
  off_t  roar_vio_lseek  (struct roar_vio_calls * vio, off_t offset, int whence);
 +
 +
Diese Funktion versucht an eine andere Position im Datenstrom zu springen. Die Position wird druch ''offset'' und ''whence'' festgelegt.
 +
 +
Es wird die neue Position vom Anfang des Datenstroms in Byte zurück gegen.
 +
 +
Beispiel:
 +
if ( roar_vio_lseek(&vio, 0, SEEK_SET) != 0 ) {
 +
  return -1;
 +
}
 +
 +
Siehe auch: lseek(2)
  
 
=== roar_vio_nonblock() ===
 
=== roar_vio_nonblock() ===
 
Prototyp:
 
Prototyp:
 
  int    roar_vio_nonblock (struct roar_vio_calls * vio, int state);
 
  int    roar_vio_nonblock (struct roar_vio_calls * vio, int state);
 +
 +
Diese Funktion setzt den Non-Blocking-Mode des Datenstroms.
 +
 +
Sie gibt entweder 0 für keinen Fehler oder -1 für Fehler zurück.
 +
 +
Beispiele:
 +
ret = roar_vio_nonblock(&vio, ROAR_SOCKET_NONBLOCK);
 +
ret = roar_vio_nonblock(&vio, ROAR_SOCKET_BLOCK);
  
 
=== roar_vio_sync() ===
 
=== roar_vio_sync() ===
 
Prototyp:
 
Prototyp:
 
  int    roar_vio_sync    (struct roar_vio_calls * vio);
 
  int    roar_vio_sync    (struct roar_vio_calls * vio);
 +
 +
Diese Funktion synchronisiert die Daten aus dem Datenstrom mit den darunter liegenden Ebenen. Sie kann dazu benutzt werden um zu erzwingen das Daten auf die Festplatte geschrieben werden (z.B. kritische Log Dateien).
 +
 +
Sie gibt entweder 0 für keinen Fehler oder -1 für Fehler zurück.
 +
 +
Weder ein erfolgreicher noch ein nicht erfolgreicher Aufruf garantieren das die Daten tatsächlich alle Tieferen Ebenen durschritten haben. Als Beispiel können sie noch im [[Cache]] der Festplatte selbst sich befinden.
  
 
=== roar_vio_ctl() ===
 
=== roar_vio_ctl() ===
Zeile 57: Zeile 91:
 
  int    roar_vio_ctl    (struct roar_vio_calls * vio, int cmd, void * data);
 
  int    roar_vio_ctl    (struct roar_vio_calls * vio, int cmd, void * data);
  
 +
Diese Funktion ermöglicht spezielle Zugriffe auf das VIO Objekt welche nicht durch die obigen Funktionen abgedeckt sind.
 +
 +
Der Aufruf dieser Funktion gibt in der Regel 0 für keinen Fehler oder -1 für einen Fehler Zustand zurück.
 +
 +
Bedeutung von ''data'' ist abhängig von ''cmd''. ''cmd'' kann je nach VIO Type verschiedene werte annehmen.
 +
Die Bedeutung des Rückgabewerts hängt ebenfalls von ''cmd'' ab.
  
 
== Siehe Auch ==
 
== Siehe Auch ==

Version vom 7. Februar 2010, 05:50 Uhr

RoarAudio Verwendet so genannte Virtuellen Ein-/Ausgabe (VIO) Objekte für (nahezu) alle IO Belange. Dieses Dokument stellt kurz die Verwendung solcher VIO Objekte vor.

VIO Objekt öffnen

Zu Beginn muss ein VIO Objekt deklariert werden. Danach kann es mittels einer Funktion zum öffnen geöffnet werden. Für jeden VIO Objekt Type gibt es im Prinzip mindestens eine Open-Funktion. Ein Teil davon soll hier vorgestellt werden. Ein anderer Teil sollte am besten mittels VIO DSTR API verwendet werden.

Deklaration eins VIO Objektes:

struct roar_vio_calls vio;

Beispiel: Öffnen der Standard Eingabe:

if ( roar_vio_open_fh(&vio, ROAR_STDIN) == -1 ) {
 return -1;
}

Auf VIO Objekt operieren

Auf VIO Objekten kann prinzipiell alles getan werden was auf normalen Dateien (Flache Dateien, Sockets, ...) auch getan werden kann. Im folgenden werden die dazugehörigen Funktionen vorgestellt.

roar_vio_close()

Prototyp:

int     roar_vio_close   (struct roar_vio_calls * vio);

Diese Funktion schließt ein offenes VIO Objekt.

Beispiel:

riar_vio_close(&vio);

roar_vio_read()

Prototyp:

ssize_t roar_vio_read    (struct roar_vio_calls * vio, void *buf, size_t count);

Diese Funktion versucht count Bytes in den Puffer buf von vio ein zu lesen.

Es wird die Anzahl wirklich gelesener Byte zurück gegeben.

Beispiel:

ret = roar_vio_read(&vio, datablock, 512);

Siehe auch: read(2)

roar_vio_write()

Prototyp:

ssize_t roar_vio_write   (struct roar_vio_calls * vio, void *buf, size_t count);

Diese Funktion versucht count Bytes aus dem Puffer buf nach vio zu schreiben.

Es wird die Anzahl wirklich geschriebenen Byte zurück gegeben.

Beispiel:

ret = roar_vio_read(&vio, datablock, 512);

Siehe auch: write(2)

roar_vio_lseek()

Prototyp:

off_t   roar_vio_lseek   (struct roar_vio_calls * vio, off_t offset, int whence);

Diese Funktion versucht an eine andere Position im Datenstrom zu springen. Die Position wird druch offset und whence festgelegt.

Es wird die neue Position vom Anfang des Datenstroms in Byte zurück gegen.

Beispiel:

if ( roar_vio_lseek(&vio, 0, SEEK_SET) != 0 ) {
  return -1;
}

Siehe auch: lseek(2)

roar_vio_nonblock()

Prototyp:

int     roar_vio_nonblock (struct roar_vio_calls * vio, int state);

Diese Funktion setzt den Non-Blocking-Mode des Datenstroms.

Sie gibt entweder 0 für keinen Fehler oder -1 für Fehler zurück.

Beispiele:

ret = roar_vio_nonblock(&vio, ROAR_SOCKET_NONBLOCK);
ret = roar_vio_nonblock(&vio, ROAR_SOCKET_BLOCK);

roar_vio_sync()

Prototyp:

int     roar_vio_sync    (struct roar_vio_calls * vio);

Diese Funktion synchronisiert die Daten aus dem Datenstrom mit den darunter liegenden Ebenen. Sie kann dazu benutzt werden um zu erzwingen das Daten auf die Festplatte geschrieben werden (z.B. kritische Log Dateien).

Sie gibt entweder 0 für keinen Fehler oder -1 für Fehler zurück.

Weder ein erfolgreicher noch ein nicht erfolgreicher Aufruf garantieren das die Daten tatsächlich alle Tieferen Ebenen durschritten haben. Als Beispiel können sie noch im Cache der Festplatte selbst sich befinden.

roar_vio_ctl()

Prototyp:

int     roar_vio_ctl     (struct roar_vio_calls * vio, int cmd, void * data);

Diese Funktion ermöglicht spezielle Zugriffe auf das VIO Objekt welche nicht durch die obigen Funktionen abgedeckt sind.

Der Aufruf dieser Funktion gibt in der Regel 0 für keinen Fehler oder -1 für einen Fehler Zustand zurück.

Bedeutung von data ist abhängig von cmd. cmd kann je nach VIO Type verschiedene werte annehmen. Die Bedeutung des Rückgabewerts hängt ebenfalls von cmd ab.

Siehe Auch

Weblinks

Offizielle Webpräsenz „RoarAudio/Programmieren/VIO”

UUGRN-Wiki verbessern („Stub”)

Dieser Artikel ist leider sehr kurz. Also: Sei mutig und mache aus ihm bitte einen guten Artikel, wenn du mehr zum Thema „RoarAudio/Programmieren/VIO” weißt.