c - 如何包含 linux/getcpu.h 等 Linux 头文件?

标签 c linux include-path

我正在使用 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_getcpusched.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/

相关文章:

c++ - 使用makefile和VS Code包含第三方 header 和库

include-path - 使用命令行 : specify IncludeCategories 运行 clang-format

c - 如何确保枚举和数组在编译时具有相同的条目?

c - 继续从同一个父进程创建多个子进程

linux - 如何从 shell bash 中的文本文件中提取模式

linux - 如何使用 AutoResetEvent 从 Windows 移植到 Linux 进程间事件

linux - jq - 转义键名中的反斜杠

C wait() 确实有效

c++ - 根据 C++ 中的数据类型设置默认值

php - 为什么 PHP "require"找不到文件?