1. 程式人生 > >獲取ios 系統 硬體資訊

獲取ios 系統 硬體資訊

在獲取和系統相關的硬體資訊的時候,api的介面有時並不是很多。但是我的理解是iOS終究是一個作業系統,是一個基於unix的衍生系統,從作業系統的角度來理解的話,系統底層的東西是很豐富的。

核心 sysctl 含義詳解:

l  compat子樹:核心二進位制相容相關的控制

l  debug子樹:核心除錯與資訊查詢

l  dev子樹:用於遍歷和查詢系統中的裝置資訊

l  hw子樹:硬體驅動資訊及行為控制

l  kern子樹:核心核心資訊及行為控制

l  kstat子樹:核心統計資料

l  machdep子樹:平臺相關的行為控制

l  net子樹:網路子系統

l  p1003_1b子樹:POSIX 1003.1b 實時擴充套件行為控制

l  security子樹:核心安全特性行為控制

l  user子樹:使用者環境配置

l  vfs子樹:虛擬檔案系統資訊和行為控制

l  vm子樹:虛擬記憶體子系統統計資料和行為控制

l  通過 sysctl 進行調優。

這樣子通過下面的方式,可以得到很多的資訊,包括CPU,記憶體大小等資訊:

+ (NSString *) getSysInfoByName:(char *)typeSpecifier

{

       size_t size;

    sysctlbyname(typeSpecifier, NULL, &size, NULL, 0);

    char *answer = malloc(size);

       sysctlbyname(typeSpecifier, answer, &size, NULL, 0);

       NSString *results = [NSString stringWithCString:answer encoding: NSUTF8StringEncoding];

       free(answer);

       return results;

}

獲取平臺資訊

+ (NSString *) platform

{

       return [self getSysInfoByName:"hw.machine"];

}

+ (NSUInteger) getSysInfo: (uint) typeSpecifier

{

       size_t size = sizeof(int);

       int results;

       int mib[2] = {CTL_HW, typeSpecifier};

       sysctl(mib, 2, &results, &size, NULL, 0);

       return (NSUInteger) results;

}

獲取CPU頻率

+ (NSUInteger) getCpuFrequency

{

       return [self getSysInfo:HW_CPU_FREQ];

}

獲取匯流排頻率

+ (NSUInteger) getBusFrequency

{

       return [self getSysInfo:HW_BUS_FREQ];

}

獲取總的記憶體大小

+ (NSUInteger) getTotalMemory

{

       return [self getSysInfo:HW_PHYSMEM];

}

獲取使用者記憶體

+ (NSUInteger) getUserMemory

{

       return [self getSysInfo:HW_USERMEM];

}

獲取socketBufferSize

+ (NSUInteger) maxSocketBufferSize

{

       return [self getSysInfo:KIPC_MAXSOCKBUF];

}

iphone下獲取可用的記憶體大小

+ (NSUInteger)getAvailableMemory

{

       vm_statistics_data_t vmStats;

    mach_msg_type_number_t infoCount = HOST_VM_INFO_COUNT;

    kern_return_t kernReturn = host_statistics(mach_host_self(), HOST_VM_INFO, (host_info_t)&vmStats, &infoCount);

    if(kernReturn != KERN_SUCCESS)

        return NSNotFound;

    return (vm_page_size * vmStats.free_count);// / 1024.0) / 1024.0;

}

其他還有很多的資訊和控制,包括網路相關的操作,wifi的mac地址等。