gethostbynameは、指定されたホスト名のホストコンピュータ情報を取得するライブラリ関数・・・。
ホスト名を指定すると、ホスト情報を格納するhostent構造体のポインタを返す・・・。
gethostbynameでホスト名からホスト情報を取得し、inet_ntoaでホスト情報の中のIPアドレスをホスト名(ただしIPアドレス文字列)に変換する・・・。
hostent構造体ポインタhost, in_addr構造体変数addrなどを用意しておく・・・。
hostnameにホスト名を入力する・・・。
gethostbynameでホスト情報を取得・・・。
ホスト名から導き出されたIPアドレス情報は, h_addr_list[0]に4つの16進数char型配列として格納されている・・・。
たとえば、1.2.3.4というIPアドレスなら、h_addr_list[0][0]が0x01, h_addr_list[0][1]が0x02, h_addr_list[0][2]が0x03, h_addr_list[0][3]が0x04という感じ・・・。
この形は、in_addr構造体のs_addrと同じである・・・。
なので、addr.s_addrにポインタを渡してみる・・・。
いったん出力・・・。
(ビッグエンディアンで格納してあるものをリトルエンディアンで参照するので逆順ではあるが・・・。)
inet_ntoaでIPアドレス文字列にする・・・。
最終的なIPアドレス文字列を出力・・・。
ホスト名"bgstation0.com"からIPアドレス文字列を取得する・・・。
$ ./gethostbyname hostname: bgstation0.com host->h_addr_list[0][0] = 1b, host->h_addr_list[0][1] = 78, host->h_addr_list[0][3] = 61, host->h_addr_list[0][3] = ffffffa2 addr.s_addr = a261781b host_str = 27.120.97.162 $
このようにホスト名からIPアドレス文字列を取得できた・・・。
Sample/gethostbyname.c at master · bg1bgst333/Sample · GitHub