for_each_set_bit 的用法
时间: 2023-07-11 20:19:19 浏览: 492
for_each_set_bit 是一个用于遍历位图中所有置位位的函数,在 C 语言中一般定义为:
```c
void for_each_set_bit(unsigned long *addr, unsigned long size, void (*func)(unsigned long, void *), void *data);
```
其中,addr 是位图数据的指针,size 是位图的大小(单位为 bit),func 是一个回调函数,用于处理每个置位位的操作,data 是传递给回调函数的参数。
使用 for_each_set_bit 可以遍历位图中所有置位位,代码示例如下:
```c
#include <linux/bitops.h>
#include <linux/kernel.h>
void print_set_bit(unsigned long bit, void *data)
{
printk("set bit at %lu\n", bit);
}
int main()
{
unsigned long bitmap[2] = {0x00000101, 0x00000000};
for_each_set_bit(bitmap, 16, print_set_bit, NULL);
return 0;
}
```
上述示例中,打印出了位图中第 0、2、8 位是置位位。注意,这里传递给 for_each_set_bit 的 size 参数是 16,而不是 32,因为我们只需要遍历前两个 unsigned long 的 32 位。
阅读全文