如何安全地使用新的Linux功能?

时间:2012-05-23 21:38:03

标签: c linux

我正在编写使用sched_setaffinity的代码,这需要内核2.5.8或更高版本。我一直试图找出这些事情是否可能:

  1. 使用较旧内核的系统可以优雅地编译它,也许只是完全忽略该代码段​​。
  2. 如果我向旧内核发送一个已编译的二进制文件,它将跳过此函数或只是打印一个警告。
  3. 我想我的问题是,如何安全地使用新的内核函数,而不会在使用旧系统时破坏整个应用程序?

2 个答案:

答案 0 :(得分:3)

使用dlopen() NULL作为文件名,dlsym()使用您想要使用的功能。如果dlsym()成功,则通过返回的函数指针调用该函数。

答案 1 :(得分:2)

您是否尝试将程序链接或运行?您可以直接通过glibc syscall()函数调用系统调用,而无需最近的C库。显然,如果没有支持,它会在早期的系统上失败(快速测试显示内核返回-1 == ENOSYS未实现的系统调用号),因此您需要对此进行测试。