ファイヤープロジェクト
ホスト情報
2003-07-20T15:13+09:00   matsu
プログラムを実行しているマシンの各種情報の取得の仕方.
ホスト情報は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);
}
実行結果は省略.
matsu(C)
Since 2002
Mail to matsu