0

所以我正在eBPF上开发一些东西。

我需要使用 unistd.h 标头,因为我想使用睡眠功能。

然而,我意识到当我输入

#include <unistd.h>

这些标头不包含在内,我会收到一条错误消息:

warning : implicit delcaration of function 'sleep' is invalid in C99 [-Wimplicit-Function-declaration] sleep (1);

我以为我在代码的其他地方做错了,所以我尝试在教程的示例中包含该标题,但它也没有那样工作。

因此,从我在下面附加的代码中,我尝试在消息发布之前延迟一秒钟。

有没有人遇到过同样的问题,并且以某种方式找到了在 c 代码中使用该标头的方法?

如果有人能给我一些帮助,我将不胜感激!

太感谢了!

我尝试更新内核并将所有头文件移动到ёusr/local/includeё目录,因为它在互联网上说这是编译器首先检查头文件但仍然无法工作的地方。

所以这是我试过但没有用的代码。

from bcc import BPF
BPF(text = 'int kprobe__sys_clone(void *ctx)
{
  #include <unistd.h>

  sleep(1);
  bpf_trace_printk("Hello World!\\n");
  return 0;
}
').trace_print()
4

1 回答 1

1

我猜你想要的是,https://github.com/iovisor/bcc/blob/master/examples/networking/xdp/xdp_drop_count.py 在该代码中搜索“睡眠”。

正如@Ctx 所说,该函数在触发克隆系统调用时发生。sleep() 没有意义,你也不能在内核中调用 sleep()。

您可能想了解上面的示例,以了解它如何设置打印时间间隔。希望有帮助。

于 2019-04-07T22:50:15.613 回答