2017-06-20 273 views
0

我一直在最近使用sysctl的很多东西,现在我HW_MACHINE_ARCH变量。我正在使用下面的代码。请注意,当我尝试获取其他变量HW_MACHINE时,此代码完美工作。我也想过,也许HW_MACHINE_ARCH是一个更深的级别,并把它作为第三个mib参数,但后来我得到了错误“是一个目录”。任何想法,为什么这是行不通的?MacOS使用sysctl()来获取HW_MACHINE_ARCH“没有这样的文件或目录”

代码:

#import<sys/sysctl.h> 

    char *OSArch = (char *)calloc(32, 1); 
    mib[0] = CTL_HW; 
    mib[1] = HW_MACHINE_ARCH; 
    if (sysctl(mib, 2, OSArch, &size_32, NULL, 0) == -1){ 
    fprintf(stderr, "[!] OSArch failed. errno: [%d][%s]\n", errno, 
    strerror(errno)); 
    } else { 
    fprintf(stdout, "OSArch: %s\n", OSArch); 
    //fprintf(tdout, "buffer int: %d\n", int_buffer); 
    } 
    free(OSArch); 
+1

如果你在命令行中运行sysctl的......像这样'的sysctl -a会发生什么| egrep -i'hw.machine''?我打赌它没有找到任何东西 – bruceg

+0

@bruceg适用于我:'hw.machine:x86_64' – duskwuff

+0

适用于sysctlbyname,但是我的代码有同样的问题... –

回答

0

这是因为你需要使用HW_MACHINE而不是HW_MACHINE_ARCH

+0

当我看到sysctl.h时,我看到两者都存在。为什么HW_MACHINE_ARCH即使在我无法访问的情况下也存在? – lelephantt

+0

还有一些奇怪的东西,例如hw.machine不是使用我的sysctl命令输出的一部分,而是在sysctl函数调用中。事实上,我通过使用sysctlbyname找到了它,它给了我正确的mib参数。符号存在的事实并不意味着这个调用会给你一个答案...如果你想在arch上有更多的信息,那么其他符号在mach/machine.h中 –

相关问题