システムの情報を取得する for Windows(CPU の枚数を取得する)
Ruby で CPU の枚数を取得したくで、WinAPI を使った方法で書いてみた。
API および構造体の情報はコメントおよびリンク先の MSDN を参照。
# # GetSystemInfo # # 現在のシステムに関する情報(ページのサイズやプロセッサの種類など)を取得します。 # # VOID GetSystemInfo( # LPSYSTEM_INFO lpSystemInfo // システム情報 # ); # # ref. http://msdn.microsoft.com/ja-jp/library/cc429808.aspx # # # SYSTEM_INFO Structure # # typedef struct _SYSTEM_INFO { # union { # DWORD dwOemId; # struct { # WORD wProcessorArchitecture; # WORD wReserved; # }; # }; # DWORD dwPageSize; # LPVOID lpMinimumApplicationAddress; # LPVOID lpMaximumApplicationAddress; # DWORD_PTR dwActiveProcessorMask; # DWORD dwNumberOfProcessors; # DWORD dwProcessorType; # DWORD dwAllocationGranularity; # WORD wProcessorLevel; # WORD wProcessorRevision; # } SYSTEM_INFO; # # ref. http://msdn.microsoft.com/en-us/library/ms724958(VS.85).aspx # require 'Win32API' getsysteminfo = Win32API.new('Kernel32', 'GetSystemInfo', ['P'], 'V') lpsysteminfo = ' ' * 8 * 10 getsysteminfo.Call(lpsysteminfo) params = lpsysteminfo.unpack('L10') puts "Hardware information:" puts " OEM ID: #{params[0]}" puts " Number of processors: #{params[5]}" puts " Page size: #{params[1]}" puts " Processor type: #{params[6]}" puts " Minimum application address: #{params[2]}" puts " Maximum application address: #{params[3]}" puts " Active processor mask: #{params[4]}"