int swoole_system_random(int min, int max) { static int dev_random_fd = -1; char *next_random_byte; int bytes_to_read; unsigned random_value; assert(max > min); if (dev_random_fd == -1) { dev_random_fd = open("/dev/urandom", O_RDONLY); if (dev_random_fd < 0) { return swoole_rand(min, max); } } next_random_byte = (char *) &random_value; bytes_to_read = sizeof(random_value); if (read(dev_random_fd, next_random_byte, bytes_to_read) < 0) { swSysError("read() failed."); return SW_ERR; } return min + (random_value % (max - min + 1)); }
void swoole_random_string(char *buf, size_t size) { int i; for (i = 0; i < size; i++) { buf[i] = characters[swoole_rand(0, sizeof(characters) - 1)]; } buf[i] = '\0'; }