libbpf 开发指南:类型转字符串

文章提供了一系列C语言代码示例,展示了如何使用libbpf库将BPF程序的attach类型、link类型、map类型和prog类型转换为对应的字符串表示,包括函数原型和Makefile/CMakeLists.txt配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

将 BPF 程序attach类型转换为字符串

函数类型

代码demo

makefile

cmake

将 bpf程序link类型转换为相应的字符串

函数原型

代码demo

makefile

cmake

bpf 程序map类型转字符串

函数原型

代码demo

makefile

cmake

bpf prog类型转字符串

函数原型

代码demo

makefile

cmake


将 BPF 程序attach类型转换为字符串

函数类型

/*
    libbpf_bpf_attach_type_str() converts the provided attach type value into a textual representation.

    Parameters:

        t – The attach type.
    Returns:

        Pointer to a static string identifying the attach type. NULL is returned for unknown bpf_attach_type values.
  
*/
LIBBPF_API const char * libbpf_bpf_attach_type_str (enum bpf_attach_type t)    

代码demo

#include <stdio.h>
#include <bpf/libbpf.h>
#include <linux/bpf.h>

int main() {
    enum bpf_attach_type attach_type = BPF_TRACE_RAW_TP;
    const char *attach_type_str = libbpf_bpf_attach_type_str(attach_type);

    printf("Attach type: %d\nAttach type string: %s\n", attach_type, attach_type_str);

    return 0;
}

makefile

CC = gcc
CFLAGS = -Wall -O2 $(shell pkg-config --cflags libbpf)
LIBS = $(shell pkg-config --libs libbpf)

all: libbpf_strerror_demo libbpf_attach_type_demo

libbpf_strerror_demo: libbpf_strerror_demo.c
	$(CC) $(CFLAGS) -o $@ $^ $(LIBS)

libbpf_attach_type_demo: libbpf_attach_type_demo.c
	$(CC) $(CFLAGS) -o $@ $^ $(LIBS)

clean:
	rm -f libbpf_strerror_demo libbpf_attach_type_demo

.PHONY: all clean

cmake

cmake_minimum_required(VERSION 3.10)
project(libbpf_attach_type_demo LANGUAGES C)

set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS OFF)

find_package(PkgConfig REQUIRED)
pkg_check_modules(LIBBPF REQUIRED IMPORTED_TARGET libbpf)

add_executable(libbpf_attach_type_demo libbpf_attach_type_demo.c)
target_link_libraries(libbpf_attach_type_demo PRIVATE PkgConfig::LIBBPF)

将 bpf程序link类型转换为相应的字符串

函数原型

/*
    libbpf_bpf_link_type_str() converts the provided link type value into a textual representation.

    Parameters:

        t – The link type.
    Returns:

        Pointer to a static string identifying the link type. NULL is returned for unknown bpf_link_type values.

*/
LIBBPF_API const char * libbpf_bpf_link_type_str (enum bpf_link_type t)

代码demo

#include <stdio.h>
#include <bpf/libbpf.h>
#include <linux/bpf.h>

int main() {
    enum bpf_link_type link_type = BPF_LINK_TYPE_TRACING;
    const char *link_type_str = libbpf_bpf_link_type_str(link_type);

    printf("Link type: %d\nLink type string: %s\n", link_type, link_type_str);

    return 0;
}

makefile

CC = gcc
CFLAGS = -Wall -Wextra -Werror
LDFLAGS = $(shell pkg-config --libs libbpf)

all: libbpf_link_type_demo

libbpf_link_type_demo: libbpf_link_type_demo.o
	$(CC) -o $@ $^ $(LDFLAGS)

libbpf_link_type_demo.o: libbpf_link_type_demo.c
	$(CC) $(CFLAGS) -c $<

clean:
	rm -f *.o libbpf_link_type_demo

.PHONY: all clean

cmake

cmake_minimum_required(VERSION 3.10)
project(libbpf_link_type_demo LANGUAGES C)

set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS OFF)

find_package(PkgConfig REQUIRED)
pkg_check_modules(LIBBPF REQUIRED IMPORTED_TARGET libbpf)

add_executable(libbpf_link_type_demo libbpf_link_type_demo.c)
target_link_libraries(libbpf_link_type_demo PRIVATE PkgConfig::LIBBPF)

bpf 程序map类型转字符串

函数原型

LIBBPF_API const char * libbpf_bpf_map_type_str (enum bpf_map_type t)

代码demo

#include <stdio.h>
#include <bpf/libbpf.h>
#include <linux/bpf.h>

int main() {
    enum bpf_map_type map_type = BPF_MAP_TYPE_HASH;
    const char *map_type_str = libbpf_bpf_map_type_str(map_type);

    printf("Map type: %d\nMap type string: %s\n", map_type, map_type_str);

    return 0;
}

makefile

CC = gcc
CFLAGS = -Wall -Wextra -Werror
LDFLAGS = $(shell pkg-config --libs libbpf)

all: libbpf_map_type_demo

libbpf_map_type_demo: libbpf_map_type_demo.o
	$(CC) -o $@ $^ $(LDFLAGS)

libbpf_map_type_demo.o: libbpf_map_type_demo.c
	$(CC) $(CFLAGS) -c $<

clean:
	rm -f *.o libbpf_map_type_demo

.PHONY: all clean

cmake

cmake_minimum_required(VERSION 3.10)
project(libbpf_map_type_demo LANGUAGES C)

set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS OFF)

find_package(PkgConfig REQUIRED)
pkg_check_modules(LIBBPF REQUIRED IMPORTED_TARGET libbpf)

add_executable(libbpf_map_type_demo libbpf_map_type_demo.c)
target_link_libraries(libbpf_map_type_demo PRIVATE PkgConfig::LIBBPF)

bpf prog类型转字符串

函数原型

/*
libbpf_bpf_prog_type_str() converts the provided program type value into a textual representation.

Parameters:

    t – The program type.
Returns:

    Pointer to a static string identifying the program type. NULL is returned for unknown bpf_prog_type values.

*/
LIBBPF_API const char * libbpf_bpf_prog_type_str (enum bpf_prog_type t)

代码demo

#include <stdio.h>
#include <bpf/libbpf.h>
#include <linux/bpf.h>

int main() {
    enum bpf_prog_type prog_type = BPF_PROG_TYPE_SCHED_CLS;
    const char *prog_type_str = libbpf_bpf_prog_type_str(prog_type);

    printf("Program type: %d\nProgram type string: %s\n", prog_type, prog_type_str);

    return 0;
}

makefile

CC = gcc
CFLAGS = -Wall -Wextra -Werror
LDFLAGS = $(shell pkg-config --libs libbpf)

all: libbpf_prog_type_demo

libbpf_prog_type_demo: libbpf_prog_type_demo.o
	$(CC) -o $@ $^ $(LDFLAGS)

libbpf_prog_type_demo.o: libbpf_prog_type_demo.c
	$(CC) $(CFLAGS) -c $<

clean:
	rm -f *.o libbpf_prog_type_demo

.PHONY: all clean

cmake

cmake_minimum_required(VERSION 3.10)
project(libbpf_prog_type_demo LANGUAGES C)

set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS OFF)

find_package(PkgConfig REQUIRED)
pkg_check_modules(LIBBPF REQUIRED IMPORTED_TARGET libbpf)

add_executable(libbpf_prog_type_demo libbpf_prog_type_demo.c)
target_link_libraries(libbpf_prog_type_demo PRIVATE PkgConfig::LIBBPF)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ym影子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值