是否可以通过某些API或函数获取此类信息,而不是解析/proc/cpuinfo
?
答案 0 :(得分:10)
来自man 5 proc
:
/proc/cpuinfo This is a collection of CPU and system architecture dependent items, for each supported architecture a different list. Two common entries are processor which gives CPU number and bogomips; a system constant that is calculated during kernel initialization. SMP machines have information for each CPU.
以下是读取信息并将信息打印到控制台stolen from forums的示例代码 - 它实际上只是一个专门的cat
命令。
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
FILE *cpuinfo = fopen("/proc/cpuinfo", "rb");
char *arg = 0;
size_t size = 0;
while(getdelim(&arg, &size, 0, cpuinfo) != -1)
{
puts(arg);
}
free(arg);
fclose(cpuinfo);
return 0;
}
请注意,如果您真的关心CPU数量与CPU核心数量,则需要解析并比较physical id
,core id
和cpu cores
以获得准确的结果。另请注意,如果htt
中有flags
,您运行的是超线程CPU,这意味着您的里程可能会有所不同。
另请注意,如果在虚拟机中运行内核,则只能看到专用于VM guest虚拟机的CPU内核。
答案 1 :(得分:5)
你可以将它用于所有类型的Linux发行版
对于C代码
num_cpus = sysconf( _SC_NPROCESSORS_ONLN );
(在QNX系统中,您可以使用num_cpus = sysinfo_numcpu()
)
对于shell脚本,您可以使用cat /proc/cpuinfo
或在linux中使用lscpu
或nproc
命令
答案 2 :(得分:4)
阅读/proc/cpuinfo
示例输出
processor : 0
model name : Intel(R) Xeon(R) CPU E5410 @ 2.33GHz
cache size : 6144 KB
physical id : 0
siblings : 4
core id : 0
cpu cores : 4
processor : 1
model name : Intel(R) Xeon(R) CPU E5410 @ 2.33GHz
cache size : 6144 KB
physical id : 0
siblings : 4
core id : 1
cpu cores : 4
processor : 2
model name : Intel(R) Xeon(R) CPU E5410 @ 2.33GHz
cache size : 6144 KB
physical id : 0
siblings : 4
core id : 2
cpu cores : 4
processor : 3
model name : Intel(R) Xeon(R) CPU E5410 @ 2.33GHz
cache size : 6144 KB
physical id : 0
siblings : 4
core id : 3
cpu cores : 4
show_cpuinfo是实际实现/proc/cpuinfo
功能
答案 3 :(得分:4)
libcpuid
提供了一个简单的API,它将直接返回所有CPU功能,包括内核数量。要在运行时获取核心数,您可以执行以下操作:
#include <stdio.h>
#include <libcpuid.h>
int main(void)
{
if (!cpuid_present()) {
printf("Sorry, your CPU doesn't support CPUID!\n");
return -1;
}
struct cpu_raw_data_t raw;
struct cpu_id_t data;
if (cpuid_get_raw_data(&raw) < 0) {
printf("Sorry, cannot get the CPUID raw data.\n");
printf("Error: %s\n", cpuid_error());
return -2;
}
if (cpu_identify(&raw, &data) < 0) {
printf("Sorrry, CPU identification failed.\n");
printf("Error: %s\n", cpuid_error());
return -3;
}
printf("Processor has %d physical cores\n", data.num_cores);
return 0;
}
答案 4 :(得分:1)
解析文件/ proc / cpuinfo。这将为您提供有关CPU的大量详细信息。将相关字段解压缩到C / C ++文件中。
答案 5 :(得分:1)
在源代码中添加以下行..
system("cat /proc/cpuinfo | grep processor | wc -l");
这将打印系统中的cpus数量。 如果你想在你的程序中使用这个系统调用的输出而不是使用popen系统调用。
答案 6 :(得分:1)
不,不是。您必须解析cpuinfo文件,否则某些库将为您执行此操作。
答案 7 :(得分:1)
根据您的Linux风格,您将从/ proc / cpuid获得不同的结果。
这对我来说可以在CentOS上获取核心总数。
cat /proc/cpuinfo | grep -w cores | sed -e 's/\t//g' | awk '{print $3}' | xargs | sed -e 's/\ /+/g' | bc
同样在Ubuntu中不起作用。对于Ubuntu,您可以使用以下命令。
nproc
答案 8 :(得分:0)
你见过这个shell命令的输出&#34; cat / proc / cpuinfo&#34;?我认为您可以获得所需的所有信息。 要读取C程序中的信息,我更喜欢文件操作函数,如fopen,fgets等。