C プロジェクト (POSIX) で、現在のシステムの完全修飾名を取得するにはどうすればよいですか?
たとえば、
gethostname()unistd.h から実行することで、自分のマシンのホスト名だけを取得できます。これは私machine3に見返りを与えるかもしれませんが、私は実際に例を探してmachine3.somedomain.comいます。
この情報を取得するにはどうすればよいですか? 可能であれば、これを行うために system() の呼び出しを使用したくありません。
C プロジェクト (POSIX) で、現在のシステムの完全修飾名を取得するにはどうすればよいですか?
たとえば、
gethostname()unistd.h から実行することで、自分のマシンのホスト名だけを取得できます。これは私machine3に見返りを与えるかもしれませんが、私は実際に例を探してmachine3.somedomain.comいます。
この情報を取得するにはどうすればよいですか? 可能であれば、これを行うために system() の呼び出しを使用したくありません。
私の解決策:
#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);
}
gethostname()ローカルホスト名を取得するPOSIXの方法です。チェックアウトしてくださいman。
BSD 関数getdomainname()はドメイン名を与えることができるので、完全修飾ホスト名を構築できます。残念ながら、ドメインを取得する POSIX の方法はありません。
簡単な方法は、 uname() を試すことです
それでもうまくいかない場合は、gethostname()、gethostbyname()、最後に gethostbyaddr() を使用します。
hostent{} の h_name は FQDN である必要があります