Poco::Util::SystemConfiguration

クロスプラットフォームなソフトを書く場合、実行時にその実行環境(OS 等)を判断したい時があると思いますが、そんな時、便利に使える Poco::Util::SystemConfiguration を紹介します。

下の表の各プロパティについて、例えば文字列として値を取得したいのならば:
 Poco::Util::SystemConfiguration::getString(const std::string& property)
を呼びます。

Property Description
system.osName OS 名
system.osVersion OS のバージョン
system.osArchitecture OS のアーキテクチャ
system.nodeName ノード(あるいはホスト)名
system.currentDir 現在のワーキングディレクトリ
system.homeDir ユーザのホームディレクトリ
system.tempDir システムのテンポラリディレクトリ
system.dateTime UTC 時刻(ISO 8601 フォーマット)
system.pid 現在のプロセス ID
system.env.<NAME> 環境変数 <NAME> の設定値

SystemConfigurationTest.cpp

Poco::Util::SystemConfigurationPoco::RefCountedObject を継承しているので、
 インスタンスポインタを Poco::AutoPtr で保持。

#include <Poco/AutoPtr.h>
#include <Poco/Util/SystemConfiguration.h>
#include <Poco/Format.h>
 
#include <string>
 
#include "ScopedLogMessage.h"
#include "PrepareConsoleLogger.h"
 
int main(int /*argc*/, char** /*argv*/)
{
	PrepareConsoleLogger logger(Poco::Logger::ROOT, Poco::Message::PRIO_INFORMATION);
 
	ScopedLogMessage msg("SystemConfigurationTest ", "start", "end");
 
	Poco::AutoPtr<Poco::Util::SystemConfiguration> pConf = new Poco::Util::SystemConfiguration;
 
	const char* const properties[] = {	"system.osName"
					,	"system.osVersion"
					,	"system.osArchitecture"
					,	"system.nodeName"
					,	"system.currentDir"
					,	"system.homeDir"
					,	"system.tempDir"
					,	"system.dateTime"
					,	"system.pid"
#if defined(POCO_OS_FAMILY_WINDOWS)
					,	"system.env.HOMEPATH"
#else
					,	"system.env.HOME"
#endif
					};
 
	std::size_t maxLength = 0;
	for(size_t i=0; i<sizeof(properties)/sizeof(properties[0]); ++i)
	{
		std::size_t len = std::string(properties[i]).length();
		maxLength = (maxLength < len) ? len:maxLength;
	}
 
	for(size_t i=0; i<sizeof(properties)/sizeof(properties[0]); ++i)
	{
		std::string property(properties[i]);
 
		std::string padding(" ");
		std::size_t paddingCount = maxLength - property.length();
		while(0 != paddingCount)
		{
			padding += " ";
			--paddingCount;
		}
 
		msg.Message(Poco::format("  %s%s= %s",	property
						,	padding
						,	pConf->getString(property)));
	}
 
	return 0;
}

Results of execution

・On Linux

[0] SystemConfigurationTest start
[0]   system.osName         = Linux
[0]   system.osVersion      = 2.6.26-2-686
[0]   system.osArchitecture = i686
[0]   system.nodeName       = debian
[0]   system.currentDir     = /home/setsu/Desktop/Poco_Web/SystemConfiguration/
[0]   system.homeDir        = /home/setsu/
[0]   system.tempDir        = /tmp/
[0]   system.dateTime       = 2010-05-11T20:45:15Z
[0]   system.pid            = 4879
[0]   system.env.HOME       = /home/setsu
[0] SystemConfigurationTest end

・On Macintosh OSX 10.6.3
  10.3.0 は Darwin Kernel Version。

[0] SystemConfigurationTest start
[0]   system.osName         = Darwin
[0]   system.osVersion      = 10.3.0
[0]   system.osArchitecture = i386
[0]   system.nodeName       = Mac-mini.local
[0]   system.currentDir     = /Users/Setsu/Desktop/Poco_Web/SystemConfiguration/
[0]   system.homeDir        = /Users/Setsu/
[0]   system.tempDir        = /var/folders/iR/iRcZrcWkGCe6fDFVNkPVjE+++TI/-Tmp-/
[0]   system.dateTime       = 2010-05-11T20:33:50Z
[0]   system.pid            = 4944
[0]   system.env.HOME       = /Users/Setsu
[0] SystemConfigurationTest end

・On Windows XP sp3

[0] SystemConfigurationTest start
[0]   system.osName         = Windows NT
[0]   system.osVersion      = 5.1 (Build 2600: Service Pack 3)
[0]   system.osArchitecture = IA32
[0]   system.nodeName       = SETSU-SHY3M0TG8
[0]   system.currentDir     = c:\Documents and Settings\setsu\デスクトップ\Poco_Web\SystemConfiguration\
[0]   system.homeDir        = C:\Documents and Settings\setsu\
[0]   system.tempDir        = C:\DOCUME~1\setsu\LOCALS~1\Temp\
[0]   system.dateTime       = 2010-05-12T09:16:42Z
[0]   system.pid            = 900
[0]   system.env.HOMEPATH   = \Documents and Settings\setsu
[0] SystemConfigurationTest end

・On Windows Vista sp2

[0] SystemConfigurationTest start
[0]   system.osName         = Windows NT
[0]   system.osVersion      = 6.0 (Build 6002: Service Pack 2)
[0]   system.osArchitecture = IA32
[0]   system.nodeName       = LH-BSRSP6OHS7R8
[0]   system.currentDir     = C:\Users\Setsu\Desktop\Poco_Web\SystemConfiguration\
[0]   system.homeDir        = C:\Users\Setsu\
[0]   system.tempDir        = C:\Users\Setsu\AppData\Local\Temp\
[0]   system.dateTime       = 2010-05-12T10:41:04Z
[0]   system.pid            = 2396
[0]   system.env.HOMEPATH   = \Users\Setsu
[0] SystemConfigurationTest end

Downloads

ここをクリックすると、makefile や VC++ プロジェクトなど一式がダウンロードできます。
(2013.05.31 updated)
・2010年5月13日からのダウンロード数:800

Subversion

・フリーの Subversion ホスティングサービス Assemblaで、ソースコードを管理しています。

Powered by POCO Copyright © 2010 Round Square Inc. All rights reserved.


Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">