使用旧系统glibc的linux系统调用

时间:2017-11-22 07:58:51

标签: glibc

我想在运行2.6.39内核的嵌入式设备解决方案中使用timerfd,但交叉编译器使用的是太旧的glibc(2.5)。 Timerfd从2.6.25开始存在,但仅限于glibc 2.8

当我尝试使用较新的glibc中的头文件时,编译器抱怨没有找到extern timerfd_create(undefined reference to 'timerfd_create'),但是我无法在glibc中的任何地方找到实现。

我现在的问题是,无论旧的glibc版本如何,我如何使用timerfd?我是否必须手动调用系统调用?如果是,我该怎么做?

1 个答案:

答案 0 :(得分:1)

  

我无法在glibc中的任何地方找到实现。

找到它的技巧:安装了libc6-dbg:

gdb -q  /lib/x86_64-linux-gnu/libc.so.6
(gdb) list timerfd_create
61  ../sysdeps/unix/syscall-template.S: No such file or directory.

这告诉您实现只是通过系统调用将参数直接传递给内核。

您的实施可以是:

#include <unistd.h>
#include <syscall.h>

#ifndef __NR_timerfd_create
#define __NR_timerfd_create 283
int timerfd_create(int clockid, int flags)
{
  return syscall(__NR_timerfd_create, clockid, flags);
}
#endif