Das Problem wurde durch Aktualisieren der C-Bibliothek behoben.Suffix für Zufallsgenerator in C nicht gefunden
Ich möchte die syscall getRandom verwenden (http://man7.org/linux/man-pages/man2/getrandom.2.html)
gcc-5 -std = c11 test.c
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/fcntl.h>
#include <errno.h>
#include <string.h>
#include <signal.h>
#include <linux/random.h>
#include <sys/syscall.h>
int main(void)
{
void *buf = NULL;
size_t l = 5;
unsigned int o = 1;
int r = syscall(SYS_getrandom, buf, l, o);
return 0;
}
oder
int main(void)
{
void *buf = NULL;
size_t l = 5;
unsigned int o = 1;
int r = getrandom(buf, l, o);
return 0;
}
Wie dem auch sei, wenn Ich versuche es mit gcc-5 zu kompilieren:
test.c: In function ‘main’:
test.c:14:17: warning: implicit declaration of function ‘getrandom’ [-Wimplicit-function-declaration]
int r = getrandom(buf, l, o);
^
/tmp/ccqFdJAJ.o: In function `main':
test.c:(.text+0x36): undefined reference to `getrandom'
collect2: error: ld returned 1 exit status
Ich benutze Ubuntu 14.04, was kann ich tun, um einen Zufallsgenerator zu verwenden? Da es sich um einen "neuen" Syscall handelt, wie kann ich ihn verwenden?
edit:
uname -r
-> 4.0.3-040003-generiC#201505131441 SMP Wed May 13 13:43:16 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
wenn ich ersetzen r durch int r = syscall(SYS_getrandom, buf, l, o);
oder r = getRandom (buf, l, o), ist es das gleiche ..
Mit Bezug auf Ihre Bearbeitung: Fügen Sie den Prototyp zu 'syscall()' bei der Verwendung hinzu! Es ist in '' Das 'SYS_getrandom' sollte dann auch verfügbar sein. –
alk
Warum benutzt du nicht [random (4)] (http://man7.org/linux/man-pages/man4/random.4.html), also einige Bytes von '/ dev/random' lesen? –
Nein, aber Sie werden einen viel neueren Kernel benötigen .... –