UNIX/LINUXプログラム設計教程(1)--システム情報の取得


1.ホストID
各マシンにはホスト名があります.ホスト名はシステム管理者によって指定されています.ネットワークでホスト名はネットワークドメイン名かもしれません.
関数gethostname()とsethostname()はホスト名を取得して設定するために使用できます.
関数のプロトタイプは以下の通りです.
#include<unstd.h>

int gethostname(char *name, size_t size);
int sethostname(const char *name, size_t length);
     
2.ハードウェア/ソフトウェアの種類の識別
関数uname()は、このプログラムを実行するコンピュータのオペレーティングシステムのバージョン情報とハードウェア情報を確認するために使用できます.
#include<sys/utsname.h>

int uname(struct utsname *info);
uname()はシステム呼び出しで、成功したら負の整数ではなく、オペレーティングシステムとホストの情報をinfoが指すデータ構造に保存します.失敗したら-1を返します
utsname構成メンバーは以下の通りです.
メンバー                                              説明
char sysname[]                            オペレーティングシステム名
char nodename[]                         コンピュータのホスト名
char release[]                               オペレーティングシステムの現在のバージョン番号
char version[]                              オペレーティングシステムの現在のバージョン内のレベル番号
char machine[]                            使用するハードウェアの種類を説明します.
これらの関数の使い方を以下の例で示します.
/*
 * main.c
 *
 *  Created on: 2013 7 30 
 *      Author: DLUTBruceZhang
 */

#include<stdio.h>
#include<unistd.h>
#include<sys/utsname.h>

#define MAXHOSTNAMELEN 64

int main(void)
{
	struct utsname uts;
	char hostname[MAXHOSTNAMELEN];
	size_t size = MAXHOSTNAMELEN;

	if(gethostname(hostname, size) != 0)
	{
		printf("error");
		return -1;
	}
	printf("hostname:%s
", hostname); if(uname(&uts) < 0) { printf("error"); return -1; } printf("System is %s on %s hardware
",uts.sysname,uts.machine); printf("Nodename is %s
",uts.nodename); printf("Release is %s, Version is %s
",uts.release,uts.version); return 0; }
実行結果は以下の通りです.
hostname:ubuntu
System is Linux on i686 hardware
Nodename is ubuntu
Release is 3.0.0-12-generic,  Version is #20-Ubuntu SMP Fri Oct 7 14:50:42 UTC 2011