How to generate a random int in C?

后端 未结 27 2419
故里飘歌
故里飘歌 2020-11-22 00:31

Is there a function to generate a random int number in C? Or will I have to use a third party library?

27条回答
  •  [愿得一人]
    2020-11-22 00:51

    For Linux C applications:

    This is my reworked code from an answer above that follows my C code practices and returns a random buffer of any size (with proper return codes, etc.). Make sure to call urandom_open() once at the beginning of your program.

    int gUrandomFd = -1;
    
    int urandom_open(void)
    {
        if (gUrandomFd == -1) {
            gUrandomFd = open("/dev/urandom", O_RDONLY);
        }
    
        if (gUrandomFd == -1) {
            fprintf(stderr, "Error opening /dev/urandom: errno [%d], strerrer [%s]\n",
                      errno, strerror(errno));
            return -1;
        } else {
            return 0;
        }
    }
    
    
    void urandom_close(void)
    {
        close(gUrandomFd);
        gUrandomFd = -1;
    }
    
    
    //
    // This link essentially validates the merits of /dev/urandom:
    // http://sockpuppet.org/blog/2014/02/25/safely-generate-random-numbers/
    //
    int getRandomBuffer(uint8_t *buf, int size)
    {
        int ret = 0; // Return value
    
        if (gUrandomFd == -1) {
            fprintf(stderr, "Urandom (/dev/urandom) file not open\n");
            return -1;
        }
    
        ret = read(gUrandomFd, buf, size);
    
        if (ret != size) {
            fprintf(stderr, "Only read [%d] bytes, expected [%d]\n",
                     ret, size);
            return -1;
        } else {
            return 0;
        }
    }
    

提交回复
热议问题