Cでアプリケーションを作成する方法はわかりませんが、次のような小さなプログラムが必要です。
lh = gethostbyname("localhost");
output = lh->h_name;
出力変数が出力されます。
上記のコードは、PHP MongoDBデータベースドライバーで使用され、コンピューターのホスト名を取得します(ホスト名は、一意のIDを生成するための入力の一部です)。これがホスト名を返すかどうかは疑問です、だから私はいくつかの証拠をお願いします。
コード例は最も役に立ちます。
幸せな日。
_#include <stdio.h>
#include <netdb.h>
int main(int argc, char *argv[])
{
struct hostent *lh = gethostbyname("localhost");
if (lh)
puts(lh->h_name);
else
herror("gethostbyname");
return 0;
}
_
それは時々動作するかもしれませんが、それはホスト名を決定する非常に信頼できる方法ではありません。 (何が返るかは、_/etc/hosts
_の設定方法によって異なります)。次のような行がある場合:
_127.0.0.1 foobar localhost
_
...その後、「foobar」を返します。逆の場合も同じですが、これも一般的ですが、「localhost」を返すだけです。より信頼できる方法は、gethostname()
関数を使用することです。
_#include <stdio.h>
#include <unistd.h>
#include <limits.h>
int main(int argc, char *argv[])
{
char hostname[Host_NAME_MAX + 1];
hostname[Host_NAME_MAX] = 0;
if (gethostname(hostname, Host_NAME_MAX) == 0)
puts(hostname);
else
perror("gethostname");
return 0;
}
_
C/UNIXでは、同等のものは次のようになります。
#include <stdio.h>
#include <netdb.h>
int main (int argc, char *argv[]) {
struct hostent *hstnm;
if (argc != 2) {
fprintf(stderr, "usage: %s hostname\n", argv[0]);
return 1;
}
hstnm = gethostbyname (argv[1]);
if (!hstnm)
return 1;
printf ("Name: %s\n", hstnm->h_name);
return 0;
}
そしてそれが機能する証拠:
$ hstnm localhost
Name: demon-a21pht
しかし、自分で試してみてください。正しい環境が整っていれば問題ありません。
なにが問題ですか?
h_name
ホスト(PC)の正式名。 DNSまたは同様の解決システムを使用している場合、サーバーが応答を返す原因となったのは完全修飾ドメイン名(FQDN)です。ローカルホストファイルを使用する場合、これはIPv4アドレスの後の最初のエントリです。