Qual cmd é o melhor para determinar o tamanho da palavra do SO (32/64) -bit? [duplicado]

2

Eu preciso encontrar meu sistema operacional (não hardware) de 32 bits / 64 bits. Qual comando é melhor?

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

Todos os comandos acima retornam a mesma resposta:

  • Em sistemas de 32 bits: i686 / i386
  • Em sistemas de 64 bits: x86_64
por Ram 02.09.2013 / 06:43

3 respostas

5

Eu recomendaria usar getconf LONG_BIT .

[root@mymachine ~]# getconf LONG_BIT
64

Isso resultará em 32 ou 64 , dependendo do seu kernel instalado, enquanto uname -m (e etc.) indicará o nome do hardware subjacente.

Veja também a questão do Stack Overflow Como determinar se um determinado Linux é de 32 ou 64 bits? , mas não se esqueça de ler o comentário útil.

    
por 02.09.2013 / 07:30
3

Você está se preparando para problemas futuros, enquadrando a pergunta dessa maneira.

4 décadas de sabedoria Unix nos dizem que o melhor caminho para a portabilidade é testar recursos específicos, e não plataformas inteiras.

Certamente você tem em mente alguma distinção específica entre sistemas de 32 e 64 bits, mas garanto que essa diferença não é universal. Existem muitos tipos de 64 bits . (E muitos tipos de 32 bits.)

Você já se limitou ao Linux, tanto pela tag na pergunta, mas também pela maneira como você fez a pergunta. Mas, você tem certeza de que este script que você está desenvolvendo nunca precisará rodar no OS X, um dos BSDs, ou mesmo um sistema Unix "real"?

  • arch é um método particularmente ruim. Ele informa sobre os tipos de CPU, não os tamanhos das palavras do sistema operacional e, mesmo assim, pode ser enganoso. No OS X da Intel, por exemplo, ele informa i386 , mesmo em um sistema de 64 bits. Não está nem disponível em todos os Linuxes.

  • uname -m e uname -p também informam sobre o tipo de CPU, em vez dos tamanhos de palavras nativas do sistema operacional.

  • uname -i não é portátil e, mesmo no Linux, pode imprimir "desconhecido".

A resposta certa depende de por que você quer saber. Se é porque você está desenvolvendo um software C que precisa fazer a coisa certa em 64 bits, então você precisa escrever um programa que sondasse o comportamento:

#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;
}

A saída desse programa irá variar entre os sistemas que supostamente compartilham o mesmo tamanho de palavra nativa. Ele varia mesmo quando executado no mesmo hardware físico, mas em sistemas operacionais diferentes.

    
por 02.09.2013 / 07:28
1

My application is supported only for 64 bit version. I need to write a shell script which should check the OS architecture if OS is 64 bit my application should start otherwise a validation message should be shown.

Nesse caso, o que eu faria seria escrever um pequeno aplicativo simulado. Algo parecido com isto:

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

Compile e associe da mesma forma que você faz seu aplicativo principal. Em seguida, escreva um script de shell como o seguinte:

#!/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

O que isso efetivamente faz é garantir que o tipo de executável que você fornece possa ser executado no sistema do usuário. Isso é semelhante a sugestão de Warren Young de "testes de capacidades" : neste caso, você está testando a capacidade para executar o formato binário da aplicação.

    
por 02.09.2013 / 09:24