2017-06-20 270 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中 –

相關問題