37

C プロジェクト (POSIX) で、現在のシステムの完全修飾名を取得するにはどうすればよいですか?

たとえば、 gethostname()unistd.h から実行することで、自分のマシンのホスト名だけを取得できます。これは私machine3に見返りを与えるかもしれませんが、私は実際に例を探してmachine3.somedomain.comいます。

この情報を取得するにはどうすればよいですか? 可能であれば、これを行うために system() の呼び出しを使用したくありません。

4

5 に答える 5

12

私の解決策:

#ifdef WIN32
    #include <Windows.h>
    #include <tchar.h>
#else
    #include <unistd.h>
#endif

void GetMachineName(char machineName[150])
{
    char Name[150];
    int i=0;

    #ifdef WIN32
        TCHAR infoBuf[150];
        DWORD bufCharCount = 150;
        memset(Name, 0, 150);
        if( GetComputerName( infoBuf, &bufCharCount ) )
        {
            for(i=0; i<150; i++)
            {
                Name[i] = infoBuf[i];
            }
        }
        else
        {
            strcpy(Name, "Unknown_Host_Name");
        }
    #else
        memset(Name, 0, 150);
        gethostname(Name, 150);
    #endif
    strncpy(machineName,Name, 150);
}
于 2011-11-25T10:50:37.040 に答える
2

gethostname()ローカルホスト名を取得するPOSIXの方法です。チェックアウトしてくださいman

BSD 関数getdomainname()はドメイン名を与えることができるので、完全修飾ホスト名を構築できます。残念ながら、ドメインを取得する POSIX の方法はありません。

于 2009-02-02T21:17:58.190 に答える
0

私はあなたが探していると信じています:

gethostbyaddress

ローカルホストの IP を渡すだけです。

gethostbyname 関数もあり、これも便利です。

于 2009-02-02T20:50:34.720 に答える
-1

簡単な方法は、 uname() を試すことです

それでもうまくいかない場合は、gethostname()、gethostbyname()、最後に gethostbyaddr() を使用します。

hostent{} の h_name は FQDN である必要があります

于 2009-02-02T20:49:36.127 に答える