Provided by: manpages-de-dev_1.11-1_all 

BEZEICHNUNG
rand, rand_r, srand - Pseudo-Zufallszahlengenerator
ÜBERSICHT
#include <stdlib.h>
int rand(void);
int rand_r(unsigned int *seedp);
void srand(unsigned int seed);
Mit Glibc erforderliche Makros (siehe feature_test_macros(7)):
rand_r(): _POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _POSIX_SOURCE
BESCHREIBUNG
Die Funktion rand() gibt eine pseudo-zufällige Ganzzahl im Bereich 0 bis RAND_MAX inklusive zurück (d.h.
dem mathematischen Bereich [0, RAND_MAX]).
Die Funktion srand() setzt ihr Argument als Seed (Zufallswert zum Erzeugen kryptografischer Schlüssel)
für eine neue Reihe von pseudo-zufälligen Ganzzahlen ein, die von rand() zurückgegeben werden. Diese
Sequenzen sind durch Aufruf von srand() mit dem selben Seed-Wert wiederholbar.
Wenn kein Seed angegeben wird, wird automatisch 1 als Seed-Wert für rand() genommen.
The function rand() is not reentrant, since it uses hidden state that is modified on each call. This
might just be the seed value to be used by the next call, or it might be something more elaborate. In
order to get reproducible behavior in a threaded application, this state must be made explicit; this can
be done using the reentrant function rand_r().
Wie rand() gibt rand_r() eine pseudo-zufällige Ganzzahl im Bereich [0, RAND_MAX] zurück. Das Argument
seedp ist ein Zeiger auf einen unsigned int, der benutzt wird, um den Status zwischen Aufrufen zu
speichern. Falls rand_r() mit dem gleichen Anfangswert für die Ganzzahl aufgerufen wird, auf die seedp
zeigt, und der Wert zwischen den Aufrufen nicht verändert wurde, dann wird das Ergebnis die gleiche
pseudo-zufällige Sequenz sein.
Der Wert, auf den das Argument seedp von rand_r() zeigt, stellt nur einen kleinen Anteil des Status
bereit, daher wird diese Funktion nur ein schwacher Pseudo-Zufallsgenerator sein. Probieren Sie
stattdessen drand48_r(3).
RÜCKGABEWERT
Die Funktionen rand() und rand_r() geben einen Wert zwischen 0 und RAND_MAX (inklusive) zurück. Die
Funktion srand() gibt keinen Wert zurück.
ATTRIBUTE
Siehe attributes(7) für eine Erläuterung der in diesem Abschnitt verwandten Ausdrücke.
┌───────────────────────────┬───────────────────────┬─────────┐
│ Schnittstelle │ Attribut │ Wert │
├───────────────────────────┼───────────────────────┼─────────┤
│ rand(), rand_r(), srand() │ Multithread-Fähigkeit │ MT-Safe │
└───────────────────────────┴───────────────────────┴─────────┘
KONFORM ZU
Die Funktionen rand() und srand() richten sich nach SVr4, 4.3BSD, C89, C99 und POSIX.1-2001. Die Funktion
rand_r() richtet sich nach POSIX.1-2001. POSIX.1-2008 kennzeichnet rand_r() als veraltet.
ANMERKUNGEN
Die Versionen von rand() und srand() in der Linux C-Bibliothek benutzen den selben Zufallszahlengenerator
wie random(3) und srandom(3), daher sollten niederwertige Bits genauso zufällig wie höherwertige Bits
sein. Bei älteren Implementierungen von rand() sind niederwertige Bits jedoch viel weniger zufällig als
höherwertige Bits. Benutzen Sie diese Funktion nicht in Anwendungen, die portierbar sein sollen, wenn ein
hochwertiger Zufall benötigt wird. (Benutzen Sie stattdessen random(3).)
BEISPIEL
POSIX.1-2001 gibt das folgende Beispiel einer Implementierung von rand() und srand(), das vielleicht
nützlich ist, wenn es darum geht, die gleiche Abfolge auf zwei unterschiedlichen Rechnern zu erhalten.
static unsigned long next = 1;
/* es wird angenommen, dass RAND_MAX 32767 ist */
int myrand(void) {
next = next * 1103515245 + 12345;
return((unsigned)(next/65536) % 32768);
}
void mysrand(unsigned int seed) {
next = seed;
}
Das folgende Programm kann benutzt werden, um eine pseudo-zufällige Sequenz anzuzeigen, die durch rand()
erzeugt wird, wenn eine bestimmte Seed (Zufallswert zum Erzeugen kryptografischer Schlüssel) vorgegeben
wird.
#include <stdlib.h>
#include <stdio.h>
int
main(int argc, char *argv[])
{
int j, r, nloops;
unsigned int seed;
if (argc != 3) {
fprintf(stderr, "Aufruf: %s <seed> <nloops>\n", argv[0]);
exit(EXIT_FAILURE);
}
seed = atoi(argv[1]);
nloops = atoi(argv[2]);
srand(seed);
for (j = 0; j < nloops; j++) {
r = rand();
printf("%d\n", r);
}
exit(EXIT_SUCCESS);
}
SIEHE AUCH
drand48(3), random(3)
KOLOPHON
Diese Seite ist Teil der Veröffentlichung 4.04 des Projekts Linux-man-pages. Eine Beschreibung des
Projekts, Informationen, wie Fehler gemeldet werden können sowie die aktuelle Version dieser Seite finden
sich unter http://www.kernel.org/doc/man-pages/.
ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von Patrick Rother <krd@gulu.net> und Chris Leick
<c.leick@vollbio.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
<debian-l10n-german@lists.debian.org>.
2. März 2015 RAND(3)