random_r(3) | Library Functions Manual | 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);
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¶
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¶
Ü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 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.
2. Mai 2024 | Linux man-pages 6.9.1 |