2011-03-16 4 views
2

가능한 중복은 :
How to determine whether a given Linux is 32 bit or 64 bit?perl 스크립트에서 64 비트 또는 32 비트 Linux에서 실행 중인지 어떻게 알 수 있습니까?

내가 직접 (UNAME를 사용하는 예를 들어) 쉘에 액세스하지 않습니다. 내가 빨리 리눅스에서 일하는 알고 아키텍처 (32 비트 또는 64 비트 경우에만)를 감지하는 빠른 방법을 찾고 있는데요.

+3

이 질문은 Perl을 지정하고 uname을 사용하지 않도록 설정합니다. 그 "복제본"의 모든 것은 쉘에서 uname을 사용하는 것입니다. 나에게 전혀 똑같은 복제본 같지 않아. – freiheit

+2

참조 http://stackoverflow.com/questions/3224082/elegantly-determining-system-architecture-within-perl/3224559#3224559 –

답변

6

있습니다.

  1. 하드웨어 란 무엇입니까? - /proc/cpuinfo은이 정보를 구문 분석하기가 어렵습니다. 기본적으로 서로 다른 CPU가 무엇인지에 대한 테이블이 있어야합니다. 커널이 64 비트라면 "주소 크기"에서 32보다 큰 숫자를 얻을 것이라고 생각합니다.
  2. OS/커널이란 무엇입니까? - 나는 use POSIX;을 믿고 (POSIX::uname())[4]을 검사하는 것은 표준적인 대답이지만 -d /lib64, -d /usr/lib64이 참이라는 것도 좋은 지표입니다.
  3. 64 비트 Perl입니까? - use Config; 그리고 , $Config{myarchname}, $Config{use64bitint} 또는 "64 비트"라고 생각하는 것과 일치하는 Config의 다른 변수를 확인하십시오.
+0

이것은 좋으며, Config에는 더 많은 구분이 있습니다. 예를 들어 호환성을 위해 32 비트 IV가있는 64 비트 컴파일러가있는 64 비트 컴퓨터에서 perl을 빌드 할 수 있습니다. 이 경우,'longsize'는 8,'ivsize' 4,'use64bitint' undef :)이 될 수 있습니다. – hobbs

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

Perl의 64 비트 구현에서 8 바이트를, Perl의 32 비트 구현에서 4 바이트를 반환합니다.

하드웨어를 실제로 확인하려면 uname을 수행하거나 64 비트 시스템 (예 :/lib64)에 합리적으로 존재하는 것이 있는지 확인해야합니다. 32 비트 응용 프로그램에 고정되어있는 경우 64 비트 하드웨어 지원을 아는 것은 대단히 유용하지 않습니다. 하나의 마법 "64 비트"가 아니라고 모든

참고 의미 할 수도 있고 다른 것들을 많이있다 : 당신이 요구 될 수있는 3 개 별도의 질문이

+0

'uname' 또는'lib64 '가 없으면 하드웨어에 관해서 만 알려주지 않습니다. 운영 체제. 64 비트 프로세스를 생성 할 수 있기 때문에 OS가 64 비트를 지원한다는 것은 매우 유용합니다. –

+0

OS를 거치지 않고 하드웨어를 사용할 수 있다는 것을 암시한다면, 리눅스의 어떤 맛을 사용하고 있습니까? 아직도, 당신은 cpuinfo를 움켜 잡고 하드웨어 아키텍처를 결정할 수 있다고 생각하지만, 당신이 그것에 접근하지 못하는 OS를 사용한다면 그 유틸리티가 그다지 큰 의미가 아닐 수도 있습니다. –

+0

64 비트 하드웨어를 사용하는 것이 전적으로 가능하지만 언급 한 모든 표시기는 32 비트 결과를 제공합니다. "하드웨어"를 "OS"와 "시스템"으로 "환경"으로 대체하면 대답은 대부분 정확합니다 ... 마지막 문장은 여전히 ​​잘못 될 것입니다 - 32 비트 응용 프로그램을 사용하면 생성을 제한하지 않습니다 64 환경이 64 비트 인 경우 비트 프로세스. –

관련 문제