Как я могу узнать количество бит процессора / ОС в C
Я знаю, как получить количество бит процессора или операционной системы с оболочкой.
cat /proc/cpuinfo | grep lm #-> get bit count of a cpu
uname -a #-> get bit count of an operation system
Тем не менее, как мы можем получить число битов в программе на Си. Это вопрос интервью, и мое решение заключается в следующем:
int *ptr;
printf("%d\n", sizeof(ptr)*8);
Но интервьюер сказал, что это неправильно. Итак, каков правильный ответ?
2 ответа
Решение
POSIX также предоставляет функцию C uname. Вы можете получить аналогичный результат, как команда оболочки uname
:
#include <stdio.h>
#include <sys/utsname.h>
int main(){
struct utsname buf;
uname(&buf);
printf("sysname: %s\nversion: %s\nmachine: %s\n ", buf.sysname, buf.version, buf.machine);
return 0;
}
Вывод на мою машину:
sysname: Linux
version: #1 SMP Tue Oct 2 22:01:37 EDT 2012
machine: i686
В Linux простой способ сделать, например, popen
с uname -m
команда и разобрать вывод.
Другой способ заключается в том, чтобы посмотреть на источник uname
команда (как это легко доступно) и реализовать что-то на основе этого непосредственно.