我有一个类型为BPF_MAP_TYPE_ARRAY
的bpfMap:
struct {
__uint(type, BPF_MAP_TYPE_ARRAY);
__uint(max_entries, 1);
__type(key, u32);
__type(value, char[MAX__SIZE]);
} input_map SEC(".maps");
然后我想得到userspace-input字符串的值,它是一种char数组类型:
char target_string[MAX_SIZE] ;
target_string = bpf_map_lookup_elem(&input_map, &0);
它有一个编译错误:
error: array type 'char[MAX__SIZE]' is not assignable
我对eBPF和C真的是新手,谁能告诉我为什么会出现这个错误,以及实现我的函数的最佳方法是什么?
1条答案
按热度按时间vngu2lb81#
你得到这个错误是因为C不允许你给
char target_string[MAX_SIZE];
赋值,因为它是一个数组。这里的技巧是,在C中,数组和指针基本上是一样的(内存方面)。除了数组类型有编译时边界检查。然而指针是可赋值的,所以我们可以这样做:额外的提示,
&0
也是不允许的,你必须创建一个键变量并传递一个指针给它。注意我们仍然可以在指针上使用
[]
操作符,和数组一样工作,唯一的问题是你必须确保你没有超出MAX_SIZE
的范围,否则验证器会阻止你。