Bearbeiten von „RoarAudio/Programmieren/VIO“

Aus UUGRN

Warnung: Du bist nicht angemeldet. Deine IP-Adresse wird bei Bearbeitungen öffentlich sichtbar. Melde dich an oder erstelle ein Benutzerkonto, damit Bearbeitungen deinem Benutzernamen zugeordnet werden.

Die Bearbeitung kann rückgängig gemacht werden. Bitte prüfe den Vergleich unten, um sicherzustellen, dass du dies tun möchtest, und speichere dann unten deine Änderungen, um die Bearbeitung rückgängig zu machen.

Aktuelle Version Dein Text
Zeile 11: Zeile 11:
 
   return -1;
 
   return -1;
 
  }
 
  }
 
=== Öffnen von Standard-Ein-/Ausgabe ===
 
Wie im oben Beispiel schon gezeigt kann die Standard Eingabe ganz einfach geöffnet werden. Zum Öffnen der Standard Ausgabe und der Standard Fehler Ausgabe muss der Parameter ROAR_STDIN nur auf ROAR_STDOUT beziehungsweise ROAR_STDERR geändert werden:
 
 
ret = roar_vio_open_fh(&vio, ROAR_STDIN );
 
ret = roar_vio_open_fh(&vio, ROAR_STDOUT);
 
ret = roar_vio_open_fh(&vio, ROAR_STDERR);
 
 
=== Öffnen von Dateien ===
 
Zum Öffnen von Dateien wird ''roar_vio_open_file()'' verwendet. Diese Funktion ist nahezu äquivalent zu open(2).
 
 
Beispiel:
 
if ( roar_vio_open_file(&vio, "/etc/motd", O_RDONLY, 0644) == -1 ) {
 
  return -1;
 
}
 
 
Da die Verwendung von open(2) und seine Parameter nur bedingt Portabel sind kann hier auf [[RoarAudio/Programmieren/VIO DSTR|VIO DSTR API]] zurückgegriffen werden. libroar wird dennoch alles tun um eine möglichst einheitliche Schnittstelle zu erzeugen. So sind Beispielsweise Patches für win32 vorhanden um POSIX/UNIX typische Parameter zu unterstützen.
 
 
Die von der Verwendung von O_BINARY wird, aus Kompatibilitätsgründen, deutlich abgeraten. Dies wird von der Bibliothek automatisch gesetzt sofern nötig.
 
 
=== Sockets ===
 
Da Sockets eine hochgradig Unportable Schnittstelle haben ist dies eines der klassischen Einsatzgebiete der VIOs.
 
 
Zur Verwendung von Sockets wird aufs dringlichste empfohlen die [[RoarAudio/Programmieren/VIO DSTR|VIO DSTR API]] zu verwenden.
 
 
=== Bereits offene Sockets verwenden ===
 
Sind bereits offene Sockets vorhanden so können diese in ein VIO Objekt umgewandelt werden. Dies gescheit mittels ''roar_vio_open_fh_socket()''.
 
 
Beispiel:
 
ret = roar_vio_open_fh_socket(&vio, socketfd);
 
 
Die Verwendung dieser Funktion, anstatt ''roar_vio_open_fh()'' (s.o.) ist unter einigen Systemen dringend erforderlich. Aus diesem Grunde sollte diese Unterscheidung immer durchgeführt werden damit eine maximal Portable Applikation entsteht. Abgesehen davon dass diese Funktion mit Sockets operiert ist sie absolut äquivalent zu ''roar_vio_open_fh()''.
 
  
 
== Auf VIO Objekt operieren ==
 
== Auf VIO Objekt operieren ==
Zeile 72: 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_write(&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 123: Zeile 57:
 
  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 ==

Bitte kopiere keine Inhalte, die nicht Deine eigenen sind!

Du gibst uns hiermit Deine Zusage, dass
  • Du den Text nicht aus Wikipedia kopiert hast
  • Du den Text selbst verfasst hast
  • oder der Text entweder
    • Allgemeingut (public domain) ist
    • oder der Copyright-Inhaber seine Zustimmung gegeben hat.
Wichtig
  • Benutze keine urheberrechtlich geschützten Werke ohne Erlaubnis des Copyright-Inhabers!
  • Falls dieser Text bereits woanders veröffentlicht wurde, weise bitte auf der 'Diskussion:'-Seite darauf hin.
  • Bitte beachte, dass alle UUGRN-Beiträge automatisch unter der der Creative Commons Lizenz stehen.
  • Falls Du nicht möchtest, dass Deine Arbeit hier von anderen verändert und verbreitet wird, dann drücke nicht auf "Artikel Speichern".

Bitte beantworte die folgende Frage, um diese Seite speichern zu können (weitere Informationen):

Abbrechen Bearbeitungshilfe (wird in einem neuen Fenster geöffnet)

Folgende Vorlagen werden auf dieser Seite verwendet: