osxのシステム情報を収集するために定義されたメソッド/ APIはありますか。 CPU、RAM、ネットワークアダプタなどのハードウェア情報を収集するユーティリティを書きたいと思います。 ありがとうございます。osxでシステム情報をどのように収集するかは、目的のCを使用して
答えて
最も簡単な方法は、system_profilerコマンドからの出力を使用することです。出力を自動的に解析しやすくするためのオプションも-xml
です。
次のリンクは、あなたが始めるのに十分でなければならない:
このリンクは404エラーを示します。リンク –
あなたがAppleシステム・プロフィールから直接欲しい情報を得るためにLeopardでscripting bridge(またはそれ以降)を使用することができます。
System Profilerが(少なくとも収集する情報の一部について)使用していると思われるAPI、および非常に特定の情報が必要な場合に使用する必要があるAPIはsysctlです。これは、CPUの数、CPUの速度、使用可能なRAMなど、システムの個々の属性を照会することができます。
システムプロファイラは、ファイルI/Oの速度が遅いためにXMLを出力し、必要な情報を取得する前に完了してください。さて、私はそれをこのように置いて、システムプロファイラは本当に最良の選択肢とこの質問の答えですか?私はそうは思わない(IMO)。ここで
は、私はそれを行う方法です。ヘッダーは、プライベートな読み書きプロパティの読み取り専用のプロパティです。カテゴリメソッドはかなり単純ですが、誰かが質問をしていれば投稿し、私は答えます。
#import <IOKit/IOKitLib.h>
#import <sys/sysctl.h>
@interface VarSystemInfo()
@property (readwrite, strong, nonatomic) NSString *sysName;
@property (readwrite, strong, nonatomic) NSString *sysUserName;
@property (readwrite, strong, nonatomic) NSString *sysFullUserName;
@property (readwrite, strong, nonatomic) NSString *sysOSName;
@property (readwrite, strong, nonatomic) NSString *sysOSVersion;
@property (readwrite, strong, nonatomic) NSString *sysPhysicalMemory;
@property (readwrite, strong, nonatomic) NSString *sysSerialNumber;
@property (readwrite, strong, nonatomic) NSString *sysUUID;
@property (readwrite, strong, nonatomic) NSString *sysModelID;
@property (readwrite, strong, nonatomic) NSString *sysModelName;
@property (readwrite, strong, nonatomic) NSString *sysProcessorName;
@property (readwrite, strong, nonatomic) NSString *sysProcessorSpeed;
@property (readwrite, strong, nonatomic) NSNumber *sysProcessorCount;
@property (readonly, strong, nonatomic) NSString *getOSVersionInfo;
- (NSString *) _strIORegistryEntry:(NSString *)registryKey;
- (NSString *) _strControlEntry:(NSString *)ctlKey;
- (NSNumber *) _numControlEntry:(NSString *)ctlKey;
- (NSString *) _modelNameFromID:(NSString *)modelID;
- (NSString *) _parseBrandName:(NSString *)brandName;
@end
static NSString* const kVarSysInfoVersionFormat = @"%@.%@.%@ (%@)";
static NSString* const kVarSysInfoPlatformExpert = @"IOPlatformExpertDevice";
static NSString* const kVarSysInfoKeyOSVersion = @"kern.osrelease";
static NSString* const kVarSysInfoKeyOSBuild = @"kern.osversion";
static NSString* const kVarSysInfoKeyModel = @"hw.model";
static NSString* const kVarSysInfoKeyCPUCount = @"hw.physicalcpu";
static NSString* const kVarSysInfoKeyCPUFreq = @"hw.cpufrequency";
static NSString* const kVarSysInfoKeyCPUBrand = @"machdep.cpu.brand_string";
static NSString* const kVarSysInfoMachineNames = @"MachineNames";
static NSString* const kVarSysInfoMachineiMac = @"iMac";
static NSString* const kVarSysInfoMachineMacmini = @"Mac mini";
static NSString* const kVarSysInfoMachineMacBookAir = @"MacBook Air";
static NSString* const kVarSysInfoMachineMacBookPro = @"MacBook Pro";
static NSString* const kVarSysInfoMachineMacPro = @"Mac Pro";
#pragma mark - Implementation:
#pragma mark -
@implementation VarSystemInfo
@synthesize sysName, sysUserName, sysFullUserName;
@synthesize sysOSName, sysOSVersion;
@synthesize sysPhysicalMemory;
@synthesize sysSerialNumber, sysUUID;
@synthesize sysModelID, sysModelName;
@synthesize sysProcessorName, sysProcessorSpeed, sysProcessorCount;
#pragma mark - Helper Methods:
- (NSString *) _strIORegistryEntry:(NSString *)registryKey {
NSString *retString;
io_service_t service =
IOServiceGetMatchingService(kIOMasterPortDefault,
IOServiceMatching([kVarSysInfoPlatformExpert UTF8String]));
if (service) {
CFTypeRef cfRefString =
IORegistryEntryCreateCFProperty(service,
(__bridge CFStringRef)registryKey,
kCFAllocatorDefault, kNilOptions);
if (cfRefString) {
retString = [NSString stringWithString:(__bridge NSString *)cfRefString];
CFRelease(cfRefString);
} IOObjectRelease(service);
} return retString;
}
- (NSString *) _strControlEntry:(NSString *)ctlKey {
size_t size = 0;
if (sysctlbyname([ctlKey UTF8String], NULL, &size, NULL, 0) == -1) return nil;
char *machine = calloc(1, size);
sysctlbyname([ctlKey UTF8String], machine, &size, NULL, 0);
NSString *ctlValue = [NSString stringWithCString:machine encoding:[NSString defaultCStringEncoding]];
free(machine); return ctlValue;
}
- (NSNumber *) _numControlEntry:(NSString *)ctlKey {
size_t size = sizeof(uint64_t); uint64_t ctlValue = 0;
if (sysctlbyname([ctlKey UTF8String], &ctlValue, &size, NULL, 0) == -1) return nil;
return [NSNumber numberWithUnsignedLongLong:ctlValue];
}
- (NSString *) _modelNameFromID:(NSString *)modelID {
/*!
* @discussion Maintain Machine Names plist from the following site
* @abstract ref: http://www.everymac.com/systems/by_capability/mac-specs-by-machine-model-machine-id.html
*
* @discussion Also info found in SPMachineTypes.plist @ /System/Library/PrivateFrameworks/...
* ...AppleSystemInfo.framework/Versions/A/Resources
* Information here is private and can not be linked into the code.
*/
NSDictionary *modelDict = [[NSBundle mainBundle] URLForResource:kVarSysInfoMachineNames withExtension:@"plist"].serialPList;
NSString *modelName = [modelDict objectForKey:modelID];
if (!modelName) {
if ([modelID.lowercaseString hasPrefix:kVarSysInfoMachineiMac.lowercaseString]) return kVarSysInfoMachineiMac;
else if ([modelID.lowercaseString hasPrefix:kVarSysInfoMachineMacmini.noWhitespaceAndLowerCaseString]) return kVarSysInfoMachineMacmini;
else if ([modelID.lowercaseString hasPrefix:kVarSysInfoMachineMacBookAir.noWhitespaceAndLowerCaseString]) return kVarSysInfoMachineMacBookAir;
else if ([modelID.lowercaseString hasPrefix:kVarSysInfoMachineMacBookPro.noWhitespaceAndLowerCaseString]) return kVarSysInfoMachineMacBookPro;
else if ([modelID.lowercaseString hasPrefix:kVarSysInfoMachineMacPro.noWhitespaceAndLowerCaseString]) return kVarSysInfoMachineMacPro;
else return modelID;
} return modelName;
}
- (NSString *) _parseBrandName:(NSString *)brandName {
if (!brandName) return nil;
NSMutableArray *newWords = [NSMutableArray array];
NSString *strCopyRight = @"r", *strTradeMark = @"tm", *strCPU = @"CPU";
NSArray *words = [brandName componentsSeparatedByCharactersInSet:[[NSCharacterSet alphanumericCharacterSet] invertedSet]];
for (NSString *word in words) {
if ([word isEqualToString:strCPU]) break;
if ([word isEqualToString:@""]) continue;
if ([word.lowercaseString isEqualToString:strCopyRight]) continue;
if ([word.lowercaseString isEqualToString:strTradeMark]) continue;
if ([word length] > 0) {
NSString *firstChar = [word substringToIndex:1];
if (NSNotFound != [firstChar rangeOfCharacterFromSet:[NSCharacterSet decimalDigitCharacterSet]].location) continue;
[newWords addObject:word];
} } return [newWords componentsJoinedByString:@" "];
}
- (NSString *) getOSVersionInfo {
NSString *darwinVer = [self _strControlEntry:kVarSysInfoKeyOSVersion];
NSString *buildNo = [self _strControlEntry:kVarSysInfoKeyOSBuild];
if (!darwinVer || !buildNo) return nil;
NSString *majorVer = @"10", *minorVer = @"x", *bugFix = @"x";
NSArray *darwinChunks = [darwinVer componentsSeparatedByCharactersInSet:[NSCharacterSet punctuationCharacterSet]];
if ([darwinChunks count] > 0) {
NSInteger firstChunk = [(NSString *)[darwinChunks objectAtIndex:0] integerValue];
minorVer = [NSString stringWithFormat:@"%ld", (firstChunk - 4)];
bugFix = [darwinChunks objectAtIndex:1];
return [NSString stringWithFormat:kVarSysInfoVersionFormat, majorVer, minorVer, bugFix, buildNo];
} return nil;
}
#pragma mark - Initalization:
- (void) setupSystemInformation {
NSProcessInfo *pi = [NSProcessInfo processInfo];
self.sysName = [[NSHost currentHost] localizedName];
self.sysUserName = NSUserName();
self.sysFullUserName = NSFullUserName();
self.sysOSName = pi.strOperatingSystem;
self.sysOSVersion = self.getOSVersionInfo;
self.sysPhysicalMemory = [[NSNumber numberWithUnsignedLongLong:pi.physicalMemory] strBinarySizeMaxFractionDigits:0];
self.sysSerialNumber = [self _strIORegistryEntry:(__bridge NSString *)CFSTR(kIOPlatformSerialNumberKey)];
self.sysUUID = [self _strIORegistryEntry:(__bridge NSString *)CFSTR(kIOPlatformUUIDKey)];
self.sysModelID = [self _strControlEntry:kVarSysInfoKeyModel];
self.sysModelName = [self _modelNameFromID:self.sysModelID];
self.sysProcessorName = [self _parseBrandName:[self _strControlEntry:kVarSysInfoKeyCPUBrand]];
self.sysProcessorSpeed = [[self _numControlEntry:kVarSysInfoKeyCPUFreq] strBaseTenSpeedMaxFractionDigits:2];
self.sysProcessorCount = [self _numControlEntry:kVarSysInfoKeyCPUCount];
}
- (id) init {
if ((self = [super init])) {
[self setupSystemInformation];
} return self;
}
@end
お楽しみください!
P.S.その安い& &すべての値はかなり静的である必要があるため、複数のシステムを回避するために、私は初期化時にすべてのプロパティ値を読み込む& &を呼び出します。
P.P.S.作成したMachineNames plistもロードしますが、アクセスできるのは自分のプロセスだけで、コメントはその情報がどこにあるのかを記述しています。
、@アービンは素晴らしい人生セーバーです。 エラー1:いくつかの行がエラーを与えているし、それらのラインがあるよう 私はあなたのコードのいくつかのあなたの注意を必要とするself.sysOSName = pi.strOperatingSystem。 エラー2:self.sysPhysicalMemory = [[のNSNumber numberWithUnsignedLongLong:pi.physicalMemory] strBinarySizeMaxFractionDigits:0]。 エラー3:self.sysModelName = [self _modelNameFromID:self.sysModelID]; エラー4:self.sysProcessorSpeed = [[self _numControlEntry:kVarSysInfoKeyCPUFreq] strBaseTenSpeedMaxFractionDigits:2]; –
- 1. アプリケーションはどのように統計情報を収集しますか?
- 2. 会社の情報を効果的に収集するには?
- 3. SQL Serverからどのように統計情報を収集しますか?
- 4. panopticlick.eff.orgと似たような情報を収集する方法
- 5. simple_one_for_one workersについての情報を収集します。
- 6. erbテンプレートの処理に関するrcov形式の情報をどのように収集しますか?
- 7. 競合率に関する情報を収集するにはどうすればよいですか?
- 8. プログラムで、私は具体的には、プログラム的にAndroidデバイスのためのシステム情報を見つけようとしていますAndroidのシステム情報
- 9. 私は、ユーザーから情報を収集し、その情報を他のページやクラスで使用したいと思うページを持っています。
- 10. MacとWindows PCから.Net Webアプリケーションを使ってシステム情報を収集する
- 11. 対策:ソフトウェアクラッシュ時の情報収集
- 12. JQueryのスクロールバーに関する情報、特にドラッグされているかどうかを収集するにはどうすればよいですか?
- 13. Java 1.4アプリケーションのプロファイリング情報を収集する方法は?
- 14. ec2-apiツールを使用してawsクラウドで最新のインスタンス情報を収集する方法は?
- 15. Djangoの管理ページで追加情報を収集していますか?
- 16. あるメソッドから2つの配列を渡して別のメソッドからユーザー情報を収集するC#
- 17. GCCプロファイル誘導最適化(PGO)はどのような情報を収集し、どの最適化でそれを使用しますか?
- 18. 画像ファイルに関する情報を収集する
- 19. フレックス:SSL証明書情報収集
- 20. FormCollectionを使用して複数のチェックボックス値を収集するにはどうすればよいですか?
- 21. Python:ウェブサイトから特定の情報を収集しようとしています
- 22. 収集目的の注文の目的は?
- 23. Flume NGを使用してコンソールでログを収集するにはどうすればよいですか?
- 24. フィルタリングパラメータを使用して収集を解決するにはどうすればよいですか?
- 25. どのように共同情報システムを作成しますか? (stackoverflowのように単純です)
- 26. UIWebviewを使用して、Paypalを使用してトランザクションを作成し、領収書または取引情報を取得するにはどうしますか?
- 27. LIKEボタン、正しい情報を収集しない
- 28. ASP.NET検証:クライアント側の検証からの情報の収集
- 29. リストを使用してデータベースから情報を収集する場合、データグリッドを自動的にリフレッシュする方法はありますか?
- 30. Win32アプリケーションの使用状況の統計情報を収集するツールはありますか?
を更新してください。これにより、情報量が増えます。ありがとう。 特定の情報を照会するAPIがあるかどうかは不思議です。メモリだけのようにするか、プロセッサーと言うことができます。 – Unicorn
あなたはmanページを読むことをお勧め: 'system_profiler -listDataTypes'、その後、' system_profiler -xmlデータ型1 ... '定義さ –
おかげで、私は私が探していたものを見つけました。私は今これを使うことができると思います。まず最初に – Unicorn