D: nslookup もどき

ホスト名を与えると 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 として渡す必要があるらしい。