prngd は、ネットワーク接続を介して "/dev/random" と "/dev/urandom" をシミュレートします。Unix ストリームベースのドメイン ソケット (「/var/run/egd-pool」) または (構成されている場合)、または TCP ポート 708 または 4840 (デフォルト値 --- 変更可能) を使用する IP のいずれかをサポートします。
したがって、Unix ドメイン ソケットを使用すると、次のようになります。
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
int devrandom(void)
{
union
{
struct sockaddr sa;
struct sockaddr_un path;
} location;
int sock;
memset(&location,0,sizeof(location));
location.path.sun_family = AF_UNIX;
strcpy(location.path.sun_path,"/var/run/egd-pool");
sock = socket(AF_UNIX,SOCK_STREAM,0);
if (sock < 0)
return -1;
if (connect(sock,&location.sa,sizeof(struct sockaddr_un)) < 0)
return -1;
return sock;
}
これにより、ランダム データを取得するために read() に渡すことができるファイル記述子が返されます (注: このコードはテストされていません)。TCP/IP ベースの接続はもう少し複雑で、ソケットをローカル アドレスにバインドし、リモート アドレスに接続する必要がありますが、そのタイプのコードの例はインターネット上にたくさんあります。