zoukankan      html  css  js  c++  java
  • iphone开发之通过unix系统底层获取和系统相关的硬件信息

    原文:http://blog.csdn.net/ArthurChenJS/article/details/6261776

    在获取和系统相关的硬件信息的时候,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地址等。

  • 相关阅读:
    【medium】78. Subsets
    【easy】784. Letter Case Permutation
    【easy】671. Second Minimum Node In a Binary Tree
    【easy】Number of Segments in a String 字符串中的分段数量
    【easy】268. Missing Number
    【easy】235. Lowest Common Ancestor of a Binary Search Tree
    【easy】198. House Robber 123总结……
    【easy】438.Find All Anagrams in a String 找出字符串中所有的变位词
    【easy-】437. Path Sum III 二叉树任意起始区间和
    【easy】437. Path Sum III 二叉树任意起始区间和
  • 原文地址:https://www.cnblogs.com/iapp/p/3631887.html
Copyright © 2011-2022 走看看