ホスト情報
プログラムを実行しているマシンの各種情報の取得の仕方.
ホスト情報はgethostnameやunameで取得できる.具体的には
$uname -aで表示される値を取得できる.以下/usr/include/sys/utsname.hより
struct utsname
{
/* Name of the implementation of the operating system. */
char sysname[_UTSNAME_LENGTH];
/* Name of this node on the network. */
char nodename[_UTSNAME_NODENAME_LENGTH];
/* Current release level of this implementation. */
char release[_UTSNAME_LENGTH];
/* Current version level of this release. */
char version[_UTSNAME_LENGTH];
/* Name of the hardware type the system is running on. */
char machine[_UTSNAME_LENGTH];
#if _UTSNAME_DOMAIN_LENGTH - 0
/* Name of the domain of this node on the network. */
# ifdef __USE_GNU
char domainname[_UTSNAME_DOMAIN_LENGTH];
# else
char __domainname[_UTSNAME_DOMAIN_LENGTH];
# endif
#endif
};
あと,ホストの一意の識別子を取得するgethostidがある.これはLinuxではインターネットアドレス(IP?)にもとづいて算出されるらしい.で,一意性は保証されない.SunWSだと一意らしい.
#include <sys/utsname.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
char *hostname;
int hostname_length=30;
struct utsname *uname_info;
/* ホスト名の取得と表示 */
gethostname(hostname,hostname_length);
fprintf(stdout,"%s\n",hostname);
/* ホスト情報の取得 */
uname_info=(struct utsname *)malloc(sizeof(struct utsname));
if(uname(uname_info)<0){
fprintf(stderr,"failed to uname()\n");
exit(1);
}
/* 取得したホスト情報を表示 */
/* OS名 */
fprintf(stdout,"%s\n",uname_info->sysname);
/* ホスト名 */
fprintf(stdout,"%s\n",uname_info->nodename);
/* リリースレベル */
fprintf(stdout,"%s\n",uname_info->release);
/* バージョン番号 */
fprintf(stdout,"%s\n",uname_info->version);
/* ハードウェアの種類 */
fprintf(stdout,"%s\n",uname_info->machine);
/* ドメイン名 */
fprintf(stdout,"%s\n",uname_info->__domainname);
/* ホストの識別子の取得と表示 */
fprintf(stdout,"%ld\n",gethostid());
exit(0);
}
実行結果は省略.

