我是eBPF的新手,我想向BPF_ARRAY插入元素,那么有什么方法可以像C++push_back()
size()
函数一样执行吗?
是和否。您可以更改数组映射中的元素(通过系统调用bpf(BPF_MAP_UPDATE_ELEM, ...)
),但此时无法动态调整映射的大小(另请参阅此答案),尽管这在未来可能是可能的,因为以前已经在这个方向上做了一些工作。
因此,现在您有一个固定大小的数组,可以从BPF程序或用户空间进行更新。对于用户空间方面,在C++中,您可能希望使用libbpf来更新映射。您在bpf.h、bpf_map_update_elem()
中有一个围绕系统调用的低级包装器,在libbpf.h:bpf_map__update_elem()
中还有一个对库管理的映射对象进行操作的高级函数。
要回答标题中的问题:是的,您可以再次通过bpf()
系统调用获取地图大小。Libbpf提供了一个包装器:bpf_obj_get_info_by_fd()
,它填充一个struct bpf_map_info
,您可以从中检索映射的大小。