首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BPF库文档

BPF库文档
EN

Stack Overflow用户
提问于 2022-03-22 09:49:15
回答 1查看 221关注 0票数 0

我用BPF库(https://github.com/libbpf/libbpf)创建了一个应用程序。不幸的是,它没有文档,至少我还没有找到它。我唯一发现的就是这个https://libbpf.readthedocs.io/en/latest/api.html,但它没有我所需要的所有东西。

我想知道,这个函数中的void是什么,以及这些ring_buffer_opts是什么。

代码语言:javascript
复制
LIBBPF_API struct ring_buffer *
ring_buffer__new(int map_fd, ring_buffer_sample_fn sample_cb, void *ctx, const struct ring_buffer_opts *opts);

在这里,我想知道什么是无效*ctx。

代码语言:javascript
复制
typedef int (*ring_buffer_sample_fn)(void *ctx, void *data, size_t size);

我更喜欢链接到文档,但是我对所有的事情都很高兴。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-22 23:19:16

您已经找到了项目的GitHub镜像(“原始”源代码在Linux内核存储库中)和官方API文档。后者是从源代码生成的,特别是从src/libbpf.h中的注释中生成的。可能是文档并不完全是最新的,在HTML呈现的文档中似乎缺少对几个函数的描述。

然而,并不是所有的函数都已经被记录下来,而环形缓冲API在这方面没有什么可以帮助您的。所以我能建议的最好是看看代码和现有的例子。内核存储库中至少有两个使用ring_buffer__new()的自测试:ringbuf.cringbuf_multi.c

第一个(ringbuf.c)这样称呼它:

代码语言:javascript
复制
    ringbuf = ring_buffer__new(skel->maps.ringbuf.map_fd,
                   process_sample, NULL, NULL);

它传递一个指针到一个名为process_sample的函数作为第二个参数,NULL作为第三个参数的ctx,以及NULL的选项。

回调函数process_samplering_buffer__poll()ring_buffer__consume() 对每个样本进行“处理”根据用户的需要调用。在本例中,回调仅适用于示例中的data,打印一行内容取决于检索到的第一个或第二个示例。回调不需要“上下文”:这就是为什么ctx参数在本例中是NULL,它由ring_buffer__new()存储,然后在每次运行时作为第一个参数传递给回调函数。

对于第二个示例(ringbuf_multi.c),我们得到一个ctx

代码语言:javascript
复制
    ringbuf = ring_buffer__new(bpf_map__fd(skel->maps.ringbuf1),
                   process_sample, (void *)(long)1, NULL);
    [...]
    
    err = ring_buffer__add(ringbuf, bpf_map__fd(skel->maps.ringbuf2),
                  process_sample, (void *)(long)2);

回调函数再次命名为process_sample,但它是一个不同的函数(它与示例的其余部分在同一个文件中定义)。我们还传递一个上下文,1,然后添加一个附加的环形缓冲区,并使用一个不同的上下文,2。如果您查看在它下面执行的检查,以及process_sample是如何定义的,应该可以很好地概述ctx是如何工作的:它是一些通用上下文,您可以传递给每个单独的环形缓冲区,这样您就可以根据它所属的环缓冲区以不同的方式处理样本。

至于struct ring_buffer_opts *选项,在示例中总是在NULL,它们似乎是暂时未用不使用它们

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71569944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档