Заголовки не работают на уровне ядра в коде eBPF
Так что я разрабатываю что-то на 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()
1 ответ
Я думаю, что вы хотите, что-то вроде, https://github.com/iovisor/bcc/blob/master/examples/networking/xdp/xdp_drop_count.py Поиск "сон" в этом коде.
Как сказал @Ctx, функция происходит, когда запускается системный вызов клона. Там нет никакого смысла в sleep(), и вы не можете сделать это в ядре, вызывающем sleep().
Возможно, вы захотите понять приведенный выше пример, чтобы увидеть, как он устанавливает интервалы для печати материала. Надеюсь, это поможет.