¿Alguien sabe de un comando que informe si un sistema es Big Endian o Little Endian, o es la mejor opción una técnica como esta usando Perl o una cadena 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? Es simple y funciona en todas partes. Es lo que pensé antes de leer el cuerpo de tu pregunta.lscpu
método más nuevo es más de lo que esperaría.od
enfoque debería funcionar en la mayoría de los sistemas abiertos, no solo en Linux, que sería el caso con el usolscpu
. Entonces, lo que es "mejor" depende de las circunstancias.Respuestas:
lscpu
El
lscpu
comando muestra (entre otras cosas):Sistemas en los que se sabe que funcionan
Se sabe que los sistemas no funcionan en
¿Por qué las aparentes diferencias entre las distribuciones?
Después de mucho cavar descubrí por qué. Parece que la versión util-linux versión 2.19 fue la primera versión que incluyó la función donde
lscpu
muestra la salida que informa la Endianness de su sistema.Como prueba, compilé las versiones 2.18 y 2.19 en mi sistema Fedora 14 y el resultado a continuación muestra las diferencias:
util-linux 2.18
util-linux 2.19
Las versiones anteriores se descargaron del sitio web kernel.org .
fuente
lscpu
no muestra ese valor, sin embargo, mi sistema Ubuntu 12.10 sí. Si no le importa, podría tomar su respuesta y dividirla en secciones para los diferentes sistemas y formas de hacerlo en cada uno.lscpu
funciona en Archlinux.Un método que encontré en los sistemas Debian / Ubuntu es ejecutar este comando:
Esto le mostrará las palabras pequeño o grande dependiendo de la arquitectura de su sistema:
fuente
Utilizando
python
:o:
donde
1
es para little endian y00256
para big endian.O usando una
perl
versión más corta :fuente
Una solución POSIX Shell & C:
fuente
Si está en un sistema que no tiene
endian.h
:fuente