Linux内核中bitmap的使用

来源:互联网 发布:mac gitignore文件 编辑:程序博客网 时间:2024/05/29 12:44

声明bitmap,实际上就是一个unsigned long数组

bit计数从0开始


#include <linux/module.h>#include <linux/sched.h>#include <linux/kthread.h>#include <linux/err.h>#include <linux/delay.h>#define BIT_CNT 50DECLARE_BITMAP(test_map, BIT_CNT) = {[0 ... BITS_TO_LONGS(BIT_CNT) - 1] = ~0};static int __init test_init(void){int ret;int i;int arr_size = BITS_TO_LONGS(BIT_CNT);printk("BITS_TO_LONGS(%d): %d\n", BIT_CNT, BITS_TO_LONGS(BIT_CNT));printk("init\n");for (i = 0; i < arr_size; i++) {printk("[%d], %08lx\n", i, test_map[i]);}printk("clear_bit(0, test_map)\n");clear_bit(0, test_map);for (i = 0; i < arr_size; i++) {printk("[%d], %08lx\n", i, test_map[i]);}printk("set_bit(0, test_map)\n");set_bit(0, test_map);for (i = 0; i < arr_size; i++) {printk("[%d], %08lx\n", i, test_map[i]);}printk("clear_bit(1, test_map)\n");clear_bit(1, test_map);for (i = 0; i < arr_size; i++) {printk("[%d], %08lx\n", i, test_map[i]);}ret = test_bit(1, test_map);printk("test_bit(1, test_map): %d\n", ret);printk("set_bit(1, test_map)\n");set_bit(1, test_map);for (i = 0; i < arr_size; i++) {printk("[%d], %08lx\n", i, test_map[i]);}ret = test_bit(1, test_map);printk("test_bit(1, test_map): %d\n", ret);ret = test_and_set_bit(5, test_map);printk("test_and_set_bit(5, test_map): %d\n", ret);for (i = 0; i < arr_size; i++) {printk("[%d], %08lx\n", i, test_map[i]);}ret = test_and_clear_bit(5, test_map);printk("test_and_clear_bit(5, test_map): %d\n", ret);for (i = 0; i < arr_size; i++) {printk("[%d], %08lx\n", i, test_map[i]);}return 0;}static void __exit test_exit(void){}module_init(test_init);module_exit(test_exit);MODULE_AUTHOR("tony");MODULE_DESCRIPTION("test");MODULE_LICENSE("GPL");MODULE_ALIAS("test");


0 0