ホスト名を与えると IP アドレス (nnn.nnn.nnn.nnn 形式と XXXXXXXX 形式) を出力するのを書いてみた。
/*
* hostname to ip address
*/
import std.socket;
import std.string;
import std.c.stdio;
int main(char args)
{
char names = args[1..args.length];
foreach (uint i, char name; names) {
printf("Host: %.*s\n", name);
InternetHost host = new InternetHost();
host.getHostByName(name);
uint addrs = host.addrList;
if (addrs)
{
foreach (uint addr; addrs)
{
printf("\t%d.%d.%d.%d (%8X)\n",
(addr >>> 24 ) & 0xFF,
(addr >>> 16 ) & 0xFF,
(addr >>> 8 ) & 0xFF,
addr & 0xFF,
addr
);
}
}
else
{
printf("\tnot found.\n");
}
}
return 0;
}
ちょっとハマったのは、printf への文字列 (char[]) の渡し方。D の文字列はいわゆる「NULL 終端文字列」ではないので、NULL を末尾に足すか、上記の用に %.*s として渡す必要があるらしい。