2011-03-16 83 views
2

可能重複:
How to determine whether a given Linux is 32 bit or 64 bit?如何知道我是否在perl腳本中運行64位或32位Linux?

我不想直接訪問外殼(例如使用UNAME)。我一直在尋找一種快速轉發的方式來檢測體系結構(只有在它是32位或64位時),一旦我知道我在Linux上。

+3

這個問題指定Perl和* not * shelling使用uname。所有關於「重複」的內容都是關於從shell中使用uname的。對我來說,看起來並不像一個完全重複的東西。 – freiheit 2011-03-17 16:18:54

+2

請參閱http://stackoverflow.com/questions/3224082/elegantly-determining-system-architecture-within-perl/3224559#3224559 – 2011-03-17 19:03:38

回答

6

有則可以要求3個獨立的問題:

注意爲所有有沒有一個神奇的「64位」,有很多不同的東西,這可能意味着。

  1. 什麼是硬件? - /proc/cpuinfo包含此信息難以解析的方式。你基本上需要有一張不同CPU的表格。不過,如果內核是64位的,我相信你會在「地址大小」中得到大於32的數字。
  2. 什麼是OS /內核? - 我相信use POSIX;和檢查(POSIX::uname())[4]是規範的答案,但-d /lib64,-d /usr/lib64是真實的也是一個很好的指標。
  3. 這是一個64位的Perl嗎? - use Config;並查看$Config{archname},$Config{myarchname},$Config{use64bitint}或Config中與您認爲「64位」含義相符的其他變量。
+0

這很好,並且在Config中還有更多不同的區別 - 例如,可以在具有32位IV的64位編譯器的64位機器上構建perl以實現兼容性。在這種情況下,'longsize'可能是8,'ivsize' 4,'use64bitint' undef :) – hobbs 2011-03-17 00:44:59

1
perl -e 'use Config; print $Config{longsize}'; 

將在64位Perl實現上返回8個字節,在32位Perl實現上返回4個字節。

如果你想實際檢查硬件,你必須做一個uname或者檢查64位機器上合理存在的東西(比如/ lib64)。請注意,如果您被困在32位應用程序中,那麼知道64位的硬件支持通常不是很有用。

+0

既不'uname'或沒有'lib64'告訴你有關硬件的任何信息,只有操作系統。知道操作系統支持64位是非常有用的,因爲你可以產生64位進程。 – 2011-03-16 17:45:52

+0

如果您暗示可以在不通過操作系統的情況下使用硬件,那麼您使用的是什麼Linux?不過,我想你可以抓取cpuinfo並確定硬件架構,但如果你使用的操作系統不支持你的訪問,它的實用性可能並不意味着太多。 – 2011-03-16 18:11:13

+0

我的意思是完全有可能擁有64位硬件,但是您提到的每個指標都會給出32位結果。如果將「硬件」替換爲「操作系統」和「機器」替換爲「環境」,您的答案基本上是正確的......儘管最後一句還是錯了 - 擁有32位應用程序並不會限制您產卵64如果環境是64位的話,它就是位處理器。 – 2011-03-16 18:17:16

相關問題