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) UBERSICHT #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 .zustandlan], size_t zustandlan, 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 Aquivalente der in random(3) beschriebenen Funktionen. Sie sind fur die Verwendung in Multithread-Programmen geeignet, wo jeder Thread eine unabhangige, reproduzierbare Zufallszahlensequenz erhalten muss. Die Funktion random_r() ist ahnlich 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 zuruckgeliefert. Die Funktion srandom_r() ist wie srandom(3), ausser dass sie den Zufallsstartwert fur 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), ausser 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 ahnlichem reserviert werden.) Die Funktion setstate_r() ist wie setstate(3), ausser dass sie den Zustand in dem Objekt verandert, auf das puf zeigt, anstatt die globale Zustandsvariable zu verandern. zustand muss zuerst mittels initstate_r() oder dem vorherigen Aufruf von setstate_r() initialisiert worden sein. RUCKGABEWERT Alle diese Funktionen liefern 0 im Erfolgsfall zuruck. Im Fehlerfall wird -1 zuruckgeliefert, 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) fur eine Erlauterung der in diesem Abschnitt verwandten Ausdrucke. +-----------------------+-------------------------+--------------------+ |Schnittstelle | Attribut | Wert | +-----------------------+-------------------------+--------------------+ |random_r(), | Multithread-Fahigkeit | MT-Sicher race:buf | |srandom_r(), | | | |initstate_r(), | | | |setstate_r() | | | +-----------------------+-------------------------+--------------------+ STANDARDS GNU. FEHLER Die Schnittstelle initstate_r() ist unubersichtlich. 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 uberschreiben. SIEHE AUCH drand48(3), rand(3), random(3) UBERSETZUNG Die deutsche Ubersetzung dieser Handbuchseite wurde von Helge Kreutzmann <debian@helgefjell.de> erstellt. Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 <https://www.gnu.org/licenses/gpl-3.0.html> oder neuer bezuglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG ubernommen. Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Ubersetzer <debian-l10n-german@lists.debian.org>. Linux man-pages 6.12 23. Juli 2024 random_r(3)