PCDVD數位科技討論區
PCDVD數位科技討論區   註冊 常見問題 標記討論區為已讀

回到   PCDVD數位科技討論區 > 其他群組 > 疑難雜症區
帳戶
密碼
 

回應
 
主題工具
change1227
Basic Member
 

加入日期: Feb 2005
文章: 22
請懂c的 大大幫我看一下

可不可以告訴我這個程式的功能 拜託囉


#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/slab.h>
#include <linux/err.h>
#include <linux/kfifo.h>


struct kfifo *kfifo_init(unsigned char *buffer, unsigned int size,
int gfp_mask, spinlock_t *lock)
{
struct kfifo *fifo;

/* size must be a power of 2 */
BUG_ON(size & (size - 1));

fifo = kmalloc(sizeof(struct kfifo), gfp_mask);
if (!fifo)
return ERR_PTR(-ENOMEM);

fifo->buffer = buffer;
fifo->size = size;
fifo->in = fifo->out = 0;
fifo->lock = lock;

return fifo;
}
EXPORT_SYMBOL(kfifo_init);

struct kfifo *kfifo_alloc(unsigned int size, int gfp_mask, spinlock_t *lock)
{
unsigned char *buffer;
struct kfifo *ret;


if (size & (size - 1)) {
BUG_ON(size > 0x80000000);
size = roundup_pow_of_two(size);
}

buffer = kmalloc(size, gfp_mask);
if (!buffer)
return ERR_PTR(-ENOMEM);

ret = kfifo_init(buffer, size, gfp_mask, lock);

if (IS_ERR(ret))
kfree(buffer);

return ret;
}
EXPORT_SYMBOL(kfifo_alloc);

void kfifo_free(struct kfifo *fifo)
{
kfree(fifo->buffer);
kfree(fifo);
}
EXPORT_SYMBOL(kfifo_free);


unsigned int __kfifo_put(struct kfifo *fifo,
unsigned char *buffer, unsigned int len)
{
unsigned int l;

len = min(len, fifo->size - fifo->in + fifo->out);

/* first put the data starting from fifo->in to buffer end */
l = min(len, fifo->size - (fifo->in & (fifo->size - 1)));
memcpy(fifo->buffer + (fifo->in & (fifo->size - 1)), buffer, l);

/* then put the rest (if any) at the beginning of the buffer */
memcpy(fifo->buffer, buffer + l, len - l);

fifo->in += len;

return len;
}
EXPORT_SYMBOL(__kfifo_put);

unsigned int __kfifo_get(struct kfifo *fifo,
unsigned char *buffer, unsigned int len)
{
unsigned int l;

len = min(len, fifo->in - fifo->out);

/* first get the data from fifo->out until the end of the buffer */
l = min(len, fifo->size - (fifo->out & (fifo->size - 1)));
memcpy(buffer, fifo->buffer + (fifo->out & (fifo->size - 1)), l);

/* then get the rest (if any) from the beginning of the buffer */
memcpy(buffer + l, fifo->buffer, len - l);

fifo->out += len;

return len;
}
EXPORT_SYMBOL(__kfifo_get);
     
      
舊 2005-05-08, 06:47 PM #1
回應時引用此文章
change1227離線中  
change1012
New Member
 

加入日期: Feb 2005
文章: 6
推一下 拜託囉
有沒有大大能幫忙
 
舊 2005-05-11, 05:05 PM #2
回應時引用此文章
change1012離線中  
axbycz
Power Member
 
axbycz的大頭照
 

加入日期: Jun 2004
文章: 574
請到 linux 找專寫 kernel 的人解答吧
2.6.10?
__________________
雨之為物 能令晝短 能令夜長
舊 2005-05-11, 05:59 PM #3
回應時引用此文章
axbycz離線中  
change1012
New Member
 

加入日期: Feb 2005
文章: 6
引用:
作者axbycz
請到 linux 找專寫 kernel 的人解答吧
2.6.10?

不知道哪裡有專們討論這個的網站呢
大大能提供一下嗎
舊 2005-05-11, 06:04 PM #4
回應時引用此文章
change1012離線中  
axbycz
Power Member
 
axbycz的大頭照
 

加入日期: Jun 2004
文章: 574
__________________
雨之為物 能令晝短 能令夜長
舊 2005-05-11, 06:27 PM #5
回應時引用此文章
axbycz離線中  


回應


POPIN
主題工具

發表文章規則
不可以發起新主題
不可以回應主題
不可以上傳附加檔案
不可以編輯您的文章

vB 代碼打開
[IMG]代碼打開
HTML代碼關閉



所有的時間均為GMT +8。 現在的時間是01:16 PM.


vBulletin Version 3.0.1
powered_by_vbulletin 2026。