운영 체제의 워드 크기(32/64) 비트를 결정하는 데 가장 적합한 cmd는 무엇입니까? [복사]

운영 체제의 워드 크기(32/64) 비트를 결정하는 데 가장 적합한 cmd는 무엇입니까? [복사]

내 OS(하드웨어 아님)가 32비트/64비트인지 확인해야 합니다. 어떤 명령이 가장 좋나요?

  • uname -p
  • uname -i
  • uname -m
  • arch

위의 모든 명령은 동일한 답변을 반환합니다.

  • 32비트 시스템: i686/i386
  • 64비트 시스템: x86_64

답변1

를 사용하는 것이 좋습니다 getconf LONG_BIT.

[root@mymachine ~]# getconf LONG_BIT
64

이것은 설치한 커널에 따라 또는 32기본 하드웨어 이름을 나타내는 (등)을 명확하게 출력합니다.64uname -m

스택 오버플로 질문도 참조하세요.특정 Linux가 32비트인지 64비트인지 확인하는 방법은 무엇입니까?, 하지만 유용한 리뷰를 꼭 읽어보세요.

답변2

이런 식으로 질문함으로써 미래의 질문에 대비하고 있습니다.

40년 동안의 Unix 지식을 통해 우리는 이식성을 달성하는 가장 좋은 방법은 전체 플랫폼이 아닌 특정 기능을 테스트하는 것이라고 배웠습니다.

물론 32비트 시스템과 64비트 시스템 사이의 몇 가지 구체적인 차이점을 생각할 수 있지만 이것이 보편적인 것은 아닙니다. 가지다다양한 64비트. (그리고 다양한 32비트 버전도 있습니다.)

질문 레이블이나 질문 방식에 따라 Linux로 자신을 제한했습니다. 하지만 개발 중인 이 스크립트가 OS X, BSD 중 하나 또는 "실제" Unix 시스템에서 실행될 필요가 전혀 없을 것이라고 확신하십니까?

  • arch특히 나쁜 접근 방식입니다. 운영 체제 단어 크기가 아닌 CPU 유형에 대한 정보를 알려주지만 이 정보도 오해의 소지가 있을 수 있습니다. 예를 들어 Intel의 OS X에서는 i38664비트 시스템에서도 이를 알려줍니다. 모든 Linux에서 작동하지 않습니다.

  • uname -m또한 uname -p운영 체제의 기본 단어 크기보다는 CPU 유형에 대한 정보를 알려줍니다.

  • uname -i이식성이 없으며 Linux에서도 "알 수 없음"이 인쇄됩니다.

정답은 알고 싶은 이유에 따라 다릅니다. 64비트에서 올바르게 작동해야 하는 C 소프트웨어를 개발 중이기 때문이라면 해당 동작을 감지하는 프로그램을 작성해야 합니다.

#include <stdio.h>

int main() {
    printf("long long = %d bits\n", sizeof(long long) * 8);
    printf("long = %d bits\n", sizeof(long) * 8);
    printf("void* = %d bits\n", sizeof(void*) * 8);
    printf("size_t = %d bits\n", sizeof(size_t) * 8);
    printf("int = %d bits\n", sizeof(int) * 8);

    return 0;
}

이 프로그램의 출력은 동일한 기본 단어 크기를 공유한다고 가정되는 시스템마다 다릅니다. 동일한 물리적 하드웨어이지만 운영 체제가 다른 경우에도 다를 수 있습니다.

답변3

내 애플리케이션은 64비트 버전만 지원합니다. OS 아키텍처를 확인하기 위해 쉘 스크립트를 작성해야 합니다. OS가 64비트이면 애플리케이션이 시작되어야 하고, 그렇지 않으면 확인 메시지가 표시되어야 합니다.

이 경우, 내가 하고 싶은 것은 작은 더미 애플리케이션을 작성하는 것뿐입니다. 이 같은:

int main(int argc, char **argv)
{
    return 0;
}

기본 애플리케이션과 동일한 방식으로 컴파일하고 연결합니다. 그런 다음 다음 쉘 스크립트를 작성하십시오.

#!/bin/sh
if ! ./test-platform-compatibility 2>&1 >/dev/null
then
  echo I refuse to run on anything but 64-bit!
  exit 1
fi
# launch your application here

이것이 효과적으로 하는 일은이것을 확실히 해라제공한 실행 파일의 유형실행할 수 있습니다사용자 시스템에서. 이는 다음과 유사합니다.워렌 영의 '적성검사' 조언: 이 예에서는 애플리케이션의 바이너리 형식을 실행하는 기능을 테스트하고 있습니다.

관련 정보