lscpu
управляйте шоу (среди прочего):
Byte Order: Little Endian
После большого рытья я узнал почему. Похоже, что версия 2.19 util-linux версии была первой версией, которая включала функцию где lscpu
шоу Вы вывод, сообщая о Порядке байтов Вашей системы.
Как тест я скомпилировал и версию 2.18 и 2.19 в своей системе Fedora 14 и вывод ниже, показывает различия:
util-linux 2.18
$ util-linux-ng-2.18/sys-utils/lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
CPU(s): 4
Thread(s) per core: 2
Core(s) per socket: 2
CPU socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 37
Stepping: 5
CPU MHz: 1199.000
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 3072K
NUMA node0 CPU(s): 0-3
util-linux 2.19
$ util-linux-2.19/sys-utils/lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 2
Core(s) per socket: 2
CPU socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 37
Stepping: 5
CPU MHz: 2667.000
BogoMIPS: 5320.02
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 3072K
NUMA node0 CPU(s): 0-3
Вышеупомянутые версии были загружены с веб-сайта kernel.org.
Один метод, который я нашел в системах Debian/Ubuntu, должен выполнить эту команду:
$ dpkg-architecture
DEB_BUILD_ARCH=amd64
DEB_BUILD_ARCH_BITS=64
DEB_BUILD_ARCH_CPU=amd64
DEB_BUILD_ARCH_ENDIAN=little
DEB_BUILD_ARCH_OS=linux
DEB_BUILD_GNU_CPU=x86_64
DEB_BUILD_GNU_SYSTEM=linux-gnu
DEB_BUILD_GNU_TYPE=x86_64-linux-gnu
DEB_BUILD_MULTIARCH=x86_64-linux-gnu
DEB_HOST_ARCH=amd64
DEB_HOST_ARCH_BITS=64
DEB_HOST_ARCH_CPU=amd64
DEB_HOST_ARCH_ENDIAN=little
DEB_HOST_ARCH_OS=linux
DEB_HOST_GNU_CPU=x86_64
DEB_HOST_GNU_SYSTEM=linux-gnu
DEB_HOST_GNU_TYPE=x86_64-linux-gnu
DEB_HOST_MULTIARCH=x86_64-linux-gnu
Это покажет Вам слова мало или большой в зависимости от архитектуры, из которой состоит Ваша система:
$ dpkg-architecture | grep -i end
DEB_BUILD_ARCH_ENDIAN=little
DEB_HOST_ARCH_ENDIAN=little
Используя python
:
$ python -c "import sys;print sys.byteorder"
little
или:
printf '\1' | od -dAn
1
где 1
для little endian и 00256
для big endian.
Или используя более короткую версию perl
:
$ perl -V:byteorder
byteorder='12345678';
Решение POSIX Shell & C:
cat << EOF > foo.c
#include <endian.h>
#include <stdio.h>
int main() {
printf("Byte Order: ");
if (BYTE_ORDER == LITTLE_ENDIAN)
printf("little");
else {
if (BYTE_ORDER == BIG_ENDIAN)
printf("big");
else
printf("unknown");
}
printf(" endian.\n");
return 0;
}
EOF
gcc -D__USE_POSIX foo.c
./a.out
Если вы работаете в системе, в которой нет endian.h
:
#include <stdio.h>
int main() {
int test = 0;
char *bytes = (char *) &test;
*bytes = 0x1;
printf("Byte Order: ");
if (test == 1){
printf("little");
}
else {
printf("big");
}
printf(" endian.\n");
return 0;
}
lscpu
не показывает, что значение, однако моя система Ubuntu 12.10 делает. Если Вы не возражаете, я мог бы взять Ваш ответ и разделить его на разделы для различных систем и способов сделать это на каждом. – slm♦ 31.08.2013, 03:31lscpu
работы над Archlinux также. – David Baggerman 31.08.2013, 03:33