random_r(3)

BEZEICHNUNG
random_r, srandom_r, initstate_r, setstate_r - Ablaufinvarianter Zufallszahlen-Generator

BIBLIOTHEK
Standard-C-Bibliothek (libc, -lc)

ÜBERSICHT
#include <stdlib.h>

int random_r(struct random_data *restrict puf,
             int32_t *restrict ergebnis);
int srandom_r(unsigned int zstart, struct random_data *puf);

int initstate_r(unsigned int zstart, char zustandpuf[restrict .zustandlän],
             size_t zustandlän, struct random_data *restrict puf);
int setstate_r(char *restrict zustandpuf,
             struct random_data *restrict puf);

    Mit Glibc erforderliche Feature-Test-Makros (siehe feature_test_macros(7)):

random_r(), srandom_r(), initstate_r(), setstate_r():
    /* Glibc >= 2.19: */ _DEFAULT_SOURCE
        || /* Glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE

BESCHREIBUNG
Diese Funktionen sind die ablaufinvarianten Äquivalente der in random(3) beschriebenen Funktionen. Sie sind für die Verwendung in Multithread-Programmen geeignet, wo jeder Thread eine unabhängige, reproduzierbare Zufallszahlensequenz erhalten muss.

Die Funktion random_r() ist ähnlich random(3). Der Unterschied besteht darin, dass sie Zustandsinformationen im Argument, auf das puf zeigt, anstatt von Zustandsinformationen in einer globalen Variablen verwendet. puf muss vorab durch initstate_r() initialisiert worden sein. Die erstellte Zufallszahl wird im Argument ergebnis zurückgeliefert.

Die Funktion srandom_r() ist wie srandom(3), außer dass sie den Zufallsstartwert für den Zufallszahlengenerator initialisiert, dessen Zustand in dem Objekt verwaltet wird, auf das puf zeigt, das vorher durch initstate_r() initialisiert werden muss, anstatt den Zufallsstartwert zu verwenden, der der globalen Zustandsvariablen zugeordnet ist.

Die Funktion initstate_r() ist wie initstate(3), außer dass sie den Zustand in dem Objekt initialisiert, auf das puf zeigt, anstatt die globale Zustandsvariable zu initialisieren. Bevor die Funktion aufgerufen wird, muss das Feld buf.state auf NULL initialisiert werden. Die Funktion initstate_r() zeichnet einen Zeiger auf das Argument statebuf innerhalb der Struktur auf, auf die puf zeigt. Daher sollte statebuf nicht freigegeben werden, solange puf noch verwandt wird. (Daher sollte statebuf typischerweise als statische Variable oder auf dem Heap mittels malloc(3) oder ähnlichem reserviert werden.)

Die Funktion setstate_r() ist wie setstate(3), außer dass sie den Zustand in dem Objekt verändert, auf das puf zeigt, anstatt die globale Zustandsvariable zu verändern. zustand muss zuerst mittels initstate_r() oder dem vorherigen Aufruf von setstate_r() initialisiert worden sein.

RÜCKGABEWERT
Alle diese Funktionen liefern 0 im Erfolgsfall zurück. Im Fehlerfall wird -1 zurückgeliefert, wobei errno gesetzt wird, um den Fehler anzuzeigen.

FEHLER

EINVAL
    In initstate_r() wurde ein Zustandsfeld von weniger als 8 byte festgelegt.

EINVAL
    Das Argument zustandpuf oder puf von setstate_r() war NULL.

EINVAL
    Das Argument puf oder ergebnis von random_r() war NULL.

ATTRIBUTE
Siehe attributes(7) für eine Erläuterung der in diesem Abschnitt verwandten Ausdrücke.
Schnittstelle | Attribut | Wert
random_r(), srandom_r(), initstate_r(), setstate_r() | Multithread-Fähigkeit | MT-Sicher race:buf

STANDARDS
GNU.

FEHLER
Die Schnittstelle initstate_r() ist unübersichtlich. Es erscheint, dass der Typ random_data undurchsichtig sein soll, aber die Implementation verlangt vom Benutzer, entweder das Feld buf.state auf NULL zu initialisieren oder vor Aufruf die gesamte Struktur mit Nullen zu überschreiben.

SIEHE AUCH
drand48(3), rand(3), random(3)

ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von Helge Kreutzmann <debian@helgefjell.de> erstellt.

Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 (https://www.gnu.org/licenses/gpl-3.0.html) oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.

Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Übersetzer: debian-l10n-german@lists.debian.org.