Provided by: manpages-de-dev_4.27.0-1_all bug

BEZEICHNUNG

       rand, rand_r, srand - Pseudo-Zufallszahlengenerator

BIBLIOTHEK

       Standard-C-Bibliothek (libc, -lc)

ÜBERSICHT

       #include <stdlib.h>

       int rand(void);
       void srand(unsigned int zstart);

       [[veraltet]] int rand_r(unsigned int *zstartz);

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

       rand_r():
           Seit Glibc 2.24:
               _POSIX_C_SOURCE >= 199506L
           Glibc 2.23 und älter
               _POSIX_C_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 Zufallsstartwert wiederholbar.

       Wenn kein Zufallsstartwert angegeben wird, wird automatisch 1 als Zufallsstartwert für rand() genommen.

       Die Funktion rand() ist nicht ablaufinvariant, da sie versteckten Status benutzt, der  bei  jedem  Aufruf
       geändert  wird.  Dies  ist  möglicherweise  nur  der Zufallsstartwert, der beim nächsten Aufruf verwendet
       werden soll, oder etwas komplizierteres. Um ein reproduzierbares Verhalten für eine Anwendung mit Threads
       zu erhalten, muss dieser Status explizit gesetzt werden; dies kann  mit  der  ablaufinvarianten  Funktion
       rand_r() erledigt werden.

       Wie  rand()  gibt  rand_r()  eine pseudo-zufällige Ganzzahl im Bereich [0, RAND_MAX] zurück. Das Argument
       zstartz 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 zstartz
       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 zstartz 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.
       ┌───────────────────────────────────────────────────────────────────┬───────────────────────┬───────────┐
       │ SchnittstelleAttributWert      │
       ├───────────────────────────────────────────────────────────────────┼───────────────────────┼───────────┤
       │ rand(), rand_r(), srand()                                         │ Multithread-Fähigkeit │ MT-Sicher │
       └───────────────────────────────────────────────────────────────────┴───────────────────────┴───────────┘

VERSIONEN

       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).)

STANDARDS

       rand()
       srand()
              C11, POSIX.1-2008.

       rand_r()
              POSIX.1-2008.

GESCHICHTE

       rand()
       srand()
              SVr4, 4.3BSD, C89, POSIX.1-2001.

       rand_r()
              POSIX.1-2001. In POSIX.1-2008 als veraltet markiert.

BEISPIELE

       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 ein bestimmter Zufallsstartwert (Zufallswert zum Erzeugen kryptografischer  Schlüssel)
       vorgegeben wird. Wenn der Zufallsstartwert als -1 angegeben wird, verwendet das Programm einen zufälligen
       Zufallsstartwert.

           #include <stdio.h>
           #include <stdlib.h>

           int
           main(int argc, char *argv[])
           {
               int           r;
               unsigned int  seed, nloops;

               if (argc != 3) {
                   fprintf(stderr, "Usage: %s <seed> <nloops>\n", argv[0]);
                   exit(EXIT_FAILURE);
               }

               seed = atoi(argv[1]);
               nloops = atoi(argv[2]);

               if (seed == -1) {
                   seed = arc4random();
                   printf("seed: %u\n", seed);
               }

               srand(seed);
               for (unsigned int j = 0; j < nloops; j++) {
                   r =  rand();
                   printf("%d\n", r);
               }

               exit(EXIT_SUCCESS);
           }

SIEHE AUCH

       drand48(3), random(3)

ÜBERSETZUNG

       Die  deutsche  Übersetzung  dieser  Handbuchseite  wurde  von  Patrick Rother <krd@gulu.net>, Chris Leick
       <c.leick@vollbio.de> und Mario Blättermann <mario.blaettermann@gmail.com> 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: debian-l10n-german@lists.debian.org.

Linux man-pages 6.9.1                             15. Juni 2024                                          rand(3)