2016-05-31 40 views

回答

1

uname -i是不可移植根據man uname,它可以編譯出來。我的新的Debian 8還打印作爲

$ uname -i 
unknown 

unameGNU coreutils的一部分,這是一個非常簡單的程序。你可以看到code on savannah。如果你通過命令行選項,看看有--hardware-platform-i

88 static struct option const uname_long_options[] = 
    89 { 
    90 {"all", no_argument, NULL, 'a'}, 
    ... 
    97 {"machine", no_argument, NULL, 'm'}, 
    98 {"processor", no_argument, NULL, 'p'}, 
    99 {"hardware-platform", no_argument, NULL, 'i'}, 
100 {"operating-system", no_argument, NULL, 'o'}, 
101 {GETOPT_HELP_OPTION_DECL}, 
102 {GETOPT_VERSION_OPTION_DECL}, 
103 {NULL, 0, NULL, 0} 
104 }; 

哪支部隊的定義PRINT_HARDWARE_PLATFORM

198  while ((c = getopt_long (argc, argv, "asnrvmpio", 
199        uname_long_options, NULL)) != -1) 
200   { 
201   switch (c) 
202    { 
... 
227    case 'p': 
228    toprint |= PRINT_PROCESSOR; 
229    break; 
230 
231    case 'i': 
232    toprint |= PRINT_HARDWARE_PLATFORM; 
233    break; 

,進而默認完成的「未知」的打印的打印。

344 if (toprint & PRINT_HARDWARE_PLATFORM) 
345  { 
346  char const *element = unknown; 
347 #if HAVE_SYSINFO && defined SI_PLATFORM 
348  { 
349   static char hardware_platform[257]; 
350   if (0 <= sysinfo (SI_PLATFORM, 
351       hardware_platform, sizeof hardware_platform)) 
352   element = hardware_platform; 
353  } 
354 #endif 

如果我沒有記錯的話(我可能是)HAVE_SYSINFO應該在sys/systeminfo.h,而該文件不存在默認情況下arch。這並不一定意味着編譯軟件包時它不在那裏。然而,它表明,最有可能的是,打包者並沒有打擾編譯HAVE_SYSINFO正確安裝的程序包。這是可接受的,因爲它是不可移植的選項。


見我的評論大約gcc -v,我拱正確評估它Target: x86_64-pc-linux-gnu。但與uname,uname無關,發送系統調用打印有關係統的信息,gcc已將目標編譯進去。


注:說unamecoreutils部分不是100%正確。 uname是POSIX標準的一部分,但uname-i--hardware-platform)選項不是該規範的一部分。 -i僅由coreutils包實現(地獄,* BSD系統有-i,但它有一個完全不同的含義)。

+0

非常感謝!...! – OsmanthusTree