MacOS使用sysctl()来获取HW_MACHINE_ARCH“没有这样的文件或目录”
我一直在最近使用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);
这是因为你需要使用HW_MACHINE
而不是HW_MACHINE_ARCH
当我看到sysctl.h时,我看到两者都存在。为什么HW_MACHINE_ARCH即使在我无法访问的情况下也存在? – lelephantt
还有一些奇怪的东西,例如hw.machine不是使用我的sysctl命令输出的一部分,而是在sysctl函数调用中。事实上,我通过使用sysctlbyname找到了它,它给了我正确的mib参数。符号存在的事实并不意味着这个调用会给你一个答案...如果你想在arch上有更多的信息,那么其他符号在mach/machine.h中 –
如果你在命令行中运行sysctl的......像这样'的sysctl -a会发生什么| egrep -i'hw.machine''?我打赌它没有找到任何东西 – bruceg
@bruceg适用于我:'hw.machine:x86_64' – duskwuff
适用于sysctlbyname,但是我的代码有同样的问题... –