目录
函数的错误返回
版本信息函数
函数原型
代码demo
makefile
将错误码转为字符串
函数原型
代码demo
makefile
cmake
函数的错误返回
当 libbpf 在“libbpf 1.0 模式”下使用时,API 函数可以通过两种方式之一返回错误。
可以使用以下行设置“libbpf 1.0”模式:
libbpf_set_strict_mode(LIBBPF_STRICT_DIRECT_ERRS | LIBBPF_STRICT_CLEAN_PTRS);
如果函数直接返回错误代码,则使用 0 表示成功,使用负错误代码表示导致错误的原因。在这种情况下,应该直接从返回中检查错误代码,不需要检查 errno。
例如:文章来源地址https://www.toymoban.com/news/detail-514786.html
err = some_libbpf_api_with_error_return(...); if (err < 0) { /* Handle error accordingly */ }
如果函数返回一个指针,它将返回 NULL 以指示发生错误。在这种情况下,应检查 errno 中的错误代码。文章来源:https://www.toymoban.com/news/detail-514786.html
例如:
ptr = some_libbpf_api_returning_ptr(); if (!ptr) { /* note no minus sign for EINVAL and E2BIG below */ if (errno == EINVAL) { /* handle EINVAL error */ } else if (errno == E2BIG) { /* handle E2BIG error */ } }
版本信息函数
函数原型
LIBBPF_API __u32 libbpf_major_version (void) LIBBPF_API __u32 libbpf_minor_version (void) LIBBPF_API const char * libbpf_version_string (void)
代码demo
#include <stdio.h> #include <bpf/libbpf.h> #include <stdlib.h> int main() { int major_version = libbpf_major_version(); printf("libbpf major version: %d\n", major_version); int minor_version = libbpf_minor_version(); printf("libbpf minor version: %d\n", minor_version); const char* version = libbpf_version_string (); printf("libbpf minor version: %s\n", version); return 0; }
makefile
CC = gcc CFLAGS = -Wall -O2 $(shell pkg-config --cflags libbpf) LIBS = $(shell pkg-config --libs libbpf) all: libbpf_version_demo libbpf_version_demo: libbpf_version_demo.c $(CC) $(CFLAGS) -o $@ $^ $(LIBS) clean: rm -f libbpf_version_demo .PHONY: all clean
将错误码转为字符串
函数原型
LIBBPF_API int libbpf_strerror (int err, char *buf, size_t size)
代码demo
#include <stdio.h> #include <bpf/libbpf.h> int main() { int error_code = -LIBBPF_ERRNO__LIBELF; char error_msg[256]; libbpf_strerror(error_code, error_msg, sizeof(error_msg)); printf("Error code: %d\nError message: %s\n", error_code, error_msg); return 0; }
makefile
CC = gcc CFLAGS = -Wall -O2 $(shell pkg-config --cflags libbpf) LIBS = $(shell pkg-config --libs libbpf) all: libbpf_strerror_demo libbpf_strerror_demo: libbpf_strerror_demo.c $(CC) $(CFLAGS) -o $@ $^ $(LIBS) clean: rm -f libbpf_strerror_demo .PHONY: all clean
cmake
cmake_minimum_required(VERSION 3.10) project(libbpf_strerror_demo 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 libbpf) add_executable(libbpf_strerror_demo libbpf_strerror_demo.c) target_include_directories(libbpf_strerror_demo PRIVATE ${LIBBPF_INCLUDE_DIRS}) target_link_libraries(libbpf_strerror_demo ${LIBBPF_LIBRARIES}) target_compile_options(libbpf_strerror_demo PRIVATE ${LIBBPF_CFLAGS_OTHER})
到了这里,关于libbpf 开发指南:错误与版本信息API介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!