15

Cでアプリケーションを作成する方法はわかりませんが、次のような小さなプログラムが必要です。

lh = gethostbyname("localhost");
output = lh->h_name;

出力変数が出力されます。

上記のコードは、PHP MongoDBデータベースドライバーでコンピューターのホスト名を取得するために使用されます(ホスト名は、一意のIDを生成するための入力の一部です)。これがホスト名を返すのではないかと疑っているので、いくつかの証拠が必要です。

コード例が最も役立ちます。

幸せな日。

4

3 に答える 3

26
#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;
}
于 2010-05-19T12:57:38.507 に答える
7

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

しかし、自分で試してみてください。適切な環境があれば、問題はありません。

于 2010-05-19T12:55:52.870 に答える
3

なにが問題ですか?

h_name

ホスト(PC)の正式名称。DNSまたは同様の解決システムを使用している場合、サーバーが応答を返す原因となったのは完全修飾ドメイン名(FQDN)です。ローカルhostsファイルを使用する場合、これはIPv4アドレスの後の最初のエントリです。

于 2010-05-19T12:52:17.163 に答える