Osx'te sistem bilgilerini toplamak için tanımlanan herhangi bir yöntem/API var mı? CPU, RAM, Ağ bağdaştırıcısı gibi donanım bilgilerini toplayacak yardımcı program yazmak istiyorum. Herhangi bir fikrin var mı? Şimdiden teşekkürler.Sistem bilgilerini osx kullanarak nesnel c kullanarak nasıl toplanır?
cevap
kolay yolu system_profiler komutunun çıktısını kullanmaktır. Ayrıca, çıkışı otomatik olarak ayrıştırmayı kolaylaştıran -xml
seçeneğine de sahiptir.
aşağıdaki linki başlangıç için yeterli olacaktır:
bu bağlantı, 404 hatası veriyor. lütfen bağlantıyı güncelleyin –
Doğrudan Apple System Profiler'den istediğiniz bilgileri almak için Leopard'da (veya daha yeni) scripting bridge numaralı telefonu kullanabilirsiniz.
Sistem Bilgisi Verenin kullandığı (en az bir kısmı için topladığı bilgiler) kullandığı ve çok özel bir bilgi istiyorsanız kullanmanız gereken temel API, sysctl. CPU, CPU hızı, kullanılabilir RAM, vb. Dahil olmak üzere sistemin tekil özniteliklerini sorgulamanıza izin verir.
Sistem Profiler hoştur ve bazı yavaş dosya G/Ç'ları için bir XML gönderir ve aynı zamanda başka İstenilen bilgiyi almadan önce tamamlama işlemi. Peki bu şekilde koyarsam, Sistem Profiler gerçekten bu soru için en iyi seçenek ve cevap nedir? Bence (IMO) değil.
İşte nasıl yaparım. Üstbilgi, özel readwrite özelliklerinin salt okunur özellikleridir. Kategori metotları oldukça basittir, ama eğer birisi bir sorum varsa o zaman posta ve cevaplayacağım.
#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. Hepsini aç Hepsini kapa Belirtiler & & birden çok sistem çağrıları önlemek için init sırasında tüm özellik değerlerini yüklemek için ucuz & & tüm değerleri oldukça statik olmalıdır.
P.P.S. Ayrıca oluşturduğum bir MachineNames plist'i de yüklüyorum, ancak kendi sürecimi sadece ona erişimi olduğunu biliyorum ve bu bilgiyi nereden aldığımı açıkladım.
Her şeyden önce, @Arvin harika ve hayat kurtarıcı. Bazı satırlarda hatalar verdiğinden ve bu satırlar aşağıdaki gibi bazı kodlarınız üzerinde dikkatinize ihtiyacım var: Hata 1: self.sysOSName = pi.strOperatingSystem; Hata 2: self.sysPhysicalMemory = [[NSNumber numberWithUnsignedLongLong: pi.physicalMemory] strBinarySizeMaxFractionDigits: 0]; Hata 3: self.sysModelName = [self _modelNameFromID: self.sysModelID]; Hata 4: self.sysProcessorSpeed = [[self _numControlEntry: kVarSysInfoKeyCPUFreq] strBaseTenSpeedMaxFractionDigits: 2]; –
- 1. Nesnel-C
- 2. Sistem ve ortam bilgilerini topla
- 3. OSX Statusbar Uygulaması kullanarak Swift
- 4. Sistem kütüphanelerini kullanarak statik kitaplık nasıl oluşturulur?
- 5. Görüntüyü nesnel c nasıl kırpılır?
- 6. Nasıl nesnel c AppDelegate dönüşmeye?
- 7. characterSet nesnel c nasıl yazdırılır?
- 8. Hedefler c: settings.bundle nesnel c nasıl alınır?
- 9. ComputerNode nesnel görünmüyor c
- 10. yapıcı nesnel c
- 11. Django kullanarak çok kiracılı sistem nasıl oluşturulur?
- 12. Facebook kullanıcı arkadaşlarının bilgilerini kullanarak, JavaScript SDK'sini kullanarak karşıdan yükleyin.
- 13. Pandalar kullanarak csv dosyasından başlık bilgilerini okuma
- 14. Ubuntu - dpkg'yi kullanarak yazılım bilgilerini edinin -
- 15. svn bilgilerini kullanarak bir düzeltme tarihi alma
- 16. önek nesnel-c mac kaldır
- 17. Eylem sayfası nasıl yeniden boyutlandırılır? nesnel C
- 18. Aygıt çerçevesini nesnel c nesnesine dönüştürün c
- 19. nesnel C enlem ve boylam
- 20. Benzersiz Java Java sistem zamanı kullanarak dosya?
- 21. Yeni Sistem Bildirimlerine Göz Atın OSX
- 22. NSTask NSPipe nesnel c komut satırı yardım
- 23. Hedef c kullanarak dize içine tamsayı nasıl eklenir?
- 24. xml'de nasıl değerler toplanır?
- 25. WP7 C# kullanarak nasıl gönderilir?
- 26. C# kullanarak e-posta al?
- 27. C'den sistem çağrılarını kullanarak CPU'ların kullanımını nasıl sağlayabilirim?
- 28. C/C++ kullanarak linux kullanıcısı nasıl oluşturulur?
- 29. C# kullanarak video akışı nasıl oluşturulur C#
- 30. Yansıma yoluyla C# kullanarak OpenOffice kullanarak
Bu, iyi miktarda bilgi verir. Bunun için teşekkürler. Sadece belirli bir bilgiyi sorgulamak için herhangi bir API olup olmadığını merak ediyorum. Sadece hafıza için olduğu gibi işlemciler de söyler. – Unicorn
Man sayfasını okumanızı önerelim: 'system_profiler -listDataTypes', sonra' system_profiler -xml dataType1 ... ' –
Teşekkürler, aradığımı buldum. Bunu şimdi kullanmaya başlayabilirim. – Unicorn