回调函数
C 语言中的回调函数是一种函数指针,可以将其作为参数传递给另一个函数,在该函数中调用回调函数来完成特定的任务
具体来说,回调函数通常用于异步编程或事件驱动编程,以处理异步任务完成后的回调
简单使用demo:
#include <stdio.h> // 回调函数类型定义 typedef void (*callback)(int); // 调用回调函数的函数 void event_loop(callback func) { printf("Start event loop...\n"); for (int i = 0; i < 5; i++) { // 模拟事件发生 printf("Event %d occurred.\n", i); // 调用回调函数 func(i); } printf("End event loop.\n"); } // 回调函数实现 void callback_func(int event_id) { printf("Callback function called with event %d.\n", event_id); } int main() { // 将回调函数传递给 event_loop 函数 event_loop(callback_func); return 0; }
在驱动编程中,回调函数十分常见,如中断处理函数就是回调函数的使用之一,应用层与驱动数据交换也离不开回调,下面是一个中断处理函数的使用demo:
irqreturn_t my_interrupt_handler(int irq, void *dev_id) { /* 中断处理代码 */ return IRQ_HANDLED; } int init_module() { int irq = 10; // 假设中断号是 10 if (request_irq(irq, my_interrupt_handler, IRQF_SHARED, "my_device", &my_device)) { // 回调函数的使用,当中断触发,回调my_interrupt_handler函数 printk(KERN_ERR "Failed to register interrupt handler\n"); return -EBUSY; } /* 其他初始化代码 */ return 0; } void cleanup_module() { int irq = 10; // 假设中断号是 10 free_irq(irq, &my_device); /* 其他清理代码 */ }