我正在使用 Linux 3.5.0-17-generic #28-Ubuntu SMP Tue Oct 9 19:31:23 UTC 2012 x86_64 GNU/Linux
,我需要 #include<linux/getcpu.h>
.编译器提示找不到该文件。 linux 的头文件在哪里?
最佳答案
简短回答:通常,您不会直接包含这些 header 。
其中的大多数操作系统/机器特定 header 都会自动包含在更通用的 header 中。那些不是 linux 的功能,这些功能可能适用于您正在运行的版本,也可能不适用。
至于getcpu
, 有一个更标准化的版本叫做 sched_getcpu
在 sched.h
中找到具有相同的功能。
或者,您可以测试该系统调用是否在您的系统上可用并手动调用它:
#define _GNU_SOURCE
#include <unistd.h>
#include <sys/syscall.h>
static inline int getcpu() {
#ifdef SYS_getcpu
int cpu, status;
status = syscall(SYS_getcpu, &cpu, NULL, NULL);
return (status == -1) ? status : cpu;
#else
return -1; // unavailable
#endif
}
如果系统调用返回 -1,变量 errno ( #include <errno.h>
) 给出错误代码。
关于c - 如何包含 linux/getcpu.h 等 Linux 头文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23224607/