クロスプラットフォームなソフトを書く場合、実行時にその実行環境(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::SystemConfiguration は Poco::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日からのダウンロード数:1126
Subversion
・フリーの Subversion ホスティングサービス Assemblaで、ソースコードを管理しています。
![]() |
Copyright © 2010 Round Square Inc. All rights reserved. |
---|
0 Comments.