如何从perl脚本中知道我是在64位还是32位linux中运行?
我不想直接访问shell(例如使用uname)。我正在寻找一种快速前进的方法来检测体系结构(仅当它是32位或64位时),一旦我知道我在linux上如何从perl脚本中知道我是在64位还是32位linux中运行?,linux,perl,architecture,Linux,Perl,Architecture,我不想直接访问shell(例如使用uname)。我正在寻找一种快速前进的方法来检测体系结构(仅当它是32位或64位时),一旦我知道我在linux上 perl -e 'use Config; print $Config{longsize}'; 将在64位Perl实现中返回8个字节,在32位Perl实现中返回4个字节 如果您想实际检查硬件,您必须执行uname或检查仅合理存在于64位机器上的某些东西(如/lib64)。请注意,如果您被困在32位应用程序中,了解64位的硬件支持通常不是很有用。您可能
perl -e 'use Config; print $Config{longsize}';
将在64位Perl实现中返回8个字节,在32位Perl实现中返回4个字节
如果您想实际检查硬件,您必须执行uname或检查仅合理存在于64位机器上的某些东西(如/lib64)。请注意,如果您被困在32位应用程序中,了解64位的硬件支持通常不是很有用。您可能会问3个独立的问题: 请注意,虽然没有一个神奇的“64位”,但有许多不同的东西可能意味着什么
/proc/cpuinfo
以难以解析的方式包含此信息。您基本上需要有一个不同CPU的表。不过,我相信如果内核是64位的,那么“地址大小”中的数字将大于32使用POSIX代码>和检查(POSIX::uname())[4]
是标准答案,但-d/lib64
,-d/usr/lib64
为真也是一个很好的指标
$Config{archname}
,$Config{myarchname}
,$Config{use64bitint}
,或者配置中与您认为的“64位”意思相匹配的其他变量无论是
uname
还是lib64
的缺失都不能告诉您有关硬件的任何信息,而只能告诉您有关操作系统的信息。知道操作系统支持64位是非常有用的,因为您可以生成64位进程。如果您暗示可以使用硬件而不必通过操作系统,那么您使用的是什么风格的Linux?尽管如此,我想您可以获取cpuinfo并确定硬件体系结构,但如果您使用的操作系统不允许您访问它,那么它的实用性可能并不重要。我的意思是,完全可以使用64位硬件,但您提到的每个指标都会给出32位结果。如果你用“操作系统”替换“硬件”,用“环境”替换“机器”,那么你的答案基本上是正确的。。。但最后一句话仍然是错误的——如果环境是64位的,则32位应用程序不会限制您生成64位进程。这很好,在配置中还有更多的区别——例如,可以在64位机器上构建一个带有64位编译器的perl,该编译器具有32位IVs以实现兼容性。在这种情况下,longsize
可能是8、ivsize
4和use64bit
undef:)这个问题指定Perl,而不是使用uname。“副本”上的所有内容都是关于从shell中使用uname。对我来说根本不是一个完全相同的副本。看到了吗