Alguém sabe de um comando que reporte se um sistema é Big Endian ou Little Endian, ou a melhor opção é uma técnica como esta usando Perl ou uma cadeia de comandos?
Perl
# little
$ perl -MConfig -e 'print "$Config{byteorder}\n";'
12345678
# big
$ perl -MConfig -e 'print "$Config{byteorder}\n";'
87654321
od awk
# little
$ echo -n I | od -to2 | awk 'FNR==1{ print substr($2,6,1)}'
1
# big
$ echo -n I | od -to2 | awk 'FNR==1{ print substr($2,6,1)}'
0
od
método? É simples e funciona em qualquer lugar. Foi o que pensei antes de ler o corpo da sua pergunta.lscpu
método mais novo é mais o que eu esperava.od
abordagem deve funcionar na maioria dos sistemas abertos, não apenas no linux, o que seria o caso do usolscpu
. Então, o que é "melhor" depende das circunstâncias.Respostas:
lscpu
O
lscpu
comando mostra (entre outras coisas):Sistemas em que se sabe trabalhar em
Sistemas que se sabe não funcionarem
Por que as aparentes diferenças entre as distribuições?
Depois de muita pesquisa, descobri o porquê. Parece que a versão util-linux versão 2.19 foi a primeira versão que incluiu o recurso em que
lscpu
mostra a saída que relata o Endianness do seu sistema.Como teste, compilei as versões 2.18 e 2.19 no meu sistema Fedora 14 e a saída abaixo mostra as diferenças:
util-linux 2.18
util-linux 2.19
As versões acima foram baixadas do site kernel.org .
fonte
lscpu
não mostram esse valor, no entanto, meu sistema Ubuntu 12.10 mostra. Se você não se importa, eu posso pegar sua resposta e dividi-la em seções para os diferentes sistemas e maneiras de fazê-lo em cada um.lscpu
funciona no Archlinux.Um método que encontrei nos sistemas Debian / Ubuntu é executar este comando:
Isso mostrará as palavras pequeno ou grande, dependendo da arquitetura em que seu sistema é composto:
fonte
Usando
python
:ou:
onde
1
é para little endian e00256
para big endian.Ou usando uma
perl
versão mais curta :fonte
Uma solução POSIX Shell & C:
fonte
Se você estiver em um sistema que não possui
endian.h
:fonte