Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从perl脚本中知道我是在64位还是32位linux中运行?_Linux_Perl_Architecture - Fatal编程技术网

如何从perl脚本中知道我是在64位还是32位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位的硬件支持通常不是很有用。您可能

我不想直接访问shell(例如使用uname)。我正在寻找一种快速前进的方法来检测体系结构(仅当它是32位或64位时),一旦我知道我在linux上

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
    为真也是一个很好的指标
  • 这是64位perl吗?--<代码>使用配置并查看
    $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。对我来说根本不是一个完全相同的副本。看到了吗