Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103497
  • 博文数量: 17
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 184
  • 用 户 组: 普通用户
  • 注册时间: 2013-05-20 11:19
个人简介

学习内核中~

文章分类

全部博文(17)

文章存档

2013年(17)

我的朋友

分类: LINUX

2013-05-27 21:28:04

linux中的队列数据结构kfifo实际上是循环队列,可以通过下面的程序来测试

点击(此处)折叠或打开

  1. #include <linux/init.h>
  2. #include <linux/module.h>
  3. #include <linux/proc_fs.h>
  4. #include <linux/kfifo.h>

  5. struct kfifo fifo;

  6. static int main_init(void)
  7. {
  8.     int ret,i;
  9.     char buf[4] = "dcba";
  10.     char e = 'e';
  11.     char x;

  12.     // 初始化kfifo
  13.     ret = kfifo_alloc(&fifo,4,GFP_KERNEL);
  14.     if(ret)
  15.         return ret;

  16.     // 存满kfifo
  17.     for(i = 0; i <4; i++){
  18.         ret = kfifo_in(&fifo,(buf + i),1);
  19.     }

  20.     // 试着存进一个字符
  21.     ret = kfifo_in(&fifo,&e,1);
  22.     if(!ret)
  23.         printk(KERN_INFO "ret is %d,kfifo is fulln",ret);

  24.     // 取出一个字符
  25.     kfifo_out(&fifo,&x,1);
  26.     printk(KERN_INFO "x is %cn",x);

  27.     // 再试着存进一个字符
  28.     ret = kfifo_in(&fifo,&e,1);
  29.     if(!ret)
  30.         printk(KERN_INFO "ret is %d,kfifo is fulln",ret);

  31.     // 打印出kfifo中所有字符
  32.     for(i = 0; i < 4; i++){
  33.     ret = kfifo_out(&fifo,&x,1);
  34.         printk(KERN_INFO "x is %cn",x);
  35.     }

  36.     return 0;
  37. }

  38. static void main_exit(void)
  39. {
  40.     kfifo_free(&fifo);
  41. }

  42. module_init(main_init);
  43. module_exit(main_exit);
使用dmesg | tail命令,输出是
[ 5998.534738] ret is 0,kfifo is full
[ 5998.534750] x is d
[ 5998.534753] x is c
[ 5998.534756] x is b
[ 5998.534758] x is a
[ 5998.534761] x is e

阅读(2272) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~