質問
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アドレスの後の最初のエントリです。
所属していません StackOverflow