在模块里尝试自己实现了个队列, 在多进程(内核里应该叫做多线程吧)操作时会出问题。
也曾尝试解决遇到的问题,但由于自己内核开发功夫上签,最终还是失败了 ....
后来还是采取了内核的实现 kfifo(include/linux/kfifo.h), kfifo在 linux 标准内核>=2.6.10 添加, 这里标准内核是因为 RHEL4.8 的内核版本是2.6.9(小于2.6.10)但是也有此数据结构,然后标准内核(www.kernel.org) <2.6.10 就没有此数据结构了
写了个简单的实现如下:
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kfifo.h>
#include <linux/err.h>
#define STR_LEN 64
#define KFF_LEN 512*256
struct kfifo *my_kfifo = NULL;
spinlock_t my_fifo_lock;
static int my_put(int num)
{
int i;
char buff[STR_LEN];
for(i=0; i<num; i++)
{
sprintf(buff,"My data: %d ...", i);
if(kfifo_put(my_kfifo, buff, STR_LEN) <= 0)
{
printk("<2>""%s failed\n", buff);
}
}
return num;
}
static int my_get(