2011-03-16 155 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

相关问题