多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全IT社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > php開源 > 綜合技術(shù) > Linux內(nèi)核通用隊列的使用筆記(讀linux內(nèi)核設(shè)計與實現(xiàn))

Linux內(nèi)核通用隊列的使用筆記(讀linux內(nèi)核設(shè)計與實現(xiàn))

來源:程序員人生   發(fā)布時間:2016-07-08 15:51:51 閱讀次數(shù):3770次
Linux內(nèi)核通用隊列實現(xiàn) Kfifo
位置:kernel/kififo.c

使用需要包括頭文件#include <kernel/kififo>

1、創(chuàng)建隊列(動態(tài)創(chuàng)建)
int kfifo_alloc(struct kififo *fifo , unsigned int size , gfp_t gfp_mask);
該函數(shù)會創(chuàng)建并初始化1個大小為size的fifo,內(nèi)核使用gfp_mask標(biāo)識分配隊列。
成功返回0
ep : 
struct kfifo fifo ; 
int ret ; 
//創(chuàng)建1個大小為PAGE_SIZE的隊列,由內(nèi)核進行內(nèi)存分配
ret = kfifo_allo(&kifo , PAGE_SIZE , GFP_KERNEL);
if(ret)
return ret ;
自己分配緩沖,可以調(diào)用:
void kfifo_init(struct kfifo *kfifo ,void *buffer , unsigned int size);
創(chuàng)建并初始化1個kfifo對象,它將使由buffer指向的size字節(jié)大小的內(nèi)存
對以上兩個函數(shù),size必須是2的冪。
靜態(tài)聲明:
DECLARE_KFIFO(name , size);
INIT_KFIFO(name);
2、堆入隊列數(shù)據(jù)
unsigned int kfifo_in(struct kfifo *fifo , const void *from , unsigned int len);
該函數(shù)將from指針?biāo)傅膌en字節(jié)的數(shù)據(jù)拷貝到fifo所指向的隊列中,成功返回數(shù)據(jù)字節(jié)大小。
3、摘取隊列數(shù)據(jù)
unsigned int kfifo_out_peek(struct kfifo *fifo , void *to  , unsigned int len , unsigned offset);;
與kfifo_out類似,如果offset為0,則讀隊列頭,參數(shù)offset指向隊列中的索引位置。
4、獲得隊列長度
//返回存儲kfifo隊列的空間的整體大小
static inline unsigned int kififo_size(struct kfifo *fifo);
//返回隊列中已堆入數(shù)據(jù)的大小
static inline unsigned int kfifo_len(struct kfifo *fifo);
//想得到kfifo隊列中還有多少可用空間
static inline unsigned int kfifo_avail(struct kififo *fifo);
//判斷隊列是不是為空,返回非0值,返回0則相反
static inline int kfifo_is_empty(struct kfifo *fifo);
//判斷隊列是不是為滿,返回非0值,返回0則相反
static inline int kfifo_is_full(struct kfifo *fifo);
5、重置和撤消隊列
//拋棄所有隊列中的內(nèi)容,調(diào)用kfifo_reset();
static inline void kfifo_reset(struct kfifo *fifo);
//撤消1個還是用kfifo_alloc()分配的隊列,調(diào)用kfifo_free();


使用舉例:

unsigned int i ; //將0,31壓如名為fifo的kfifo中 for(i = 0 ; i < 32 ; i++) kfifo_in(fifo , &i , sizeof(i)); unsigned int val ; int ret ; ret = kfifo_out_peek(fifo , &val , sizeof(val) , 0); if(ret != sizeof(val)) return -EINVAL ; printk(KERN_INFO"%u\n",val);//應(yīng)當(dāng)輸出0 //摘取并打印kfifo中的所有元素,可以調(diào)用kfifo_out(); //當(dāng)隊列中還有數(shù)據(jù)時,按順序從0到31打印出來 while(kfifo_avail(fifo)){ unsigned int ret ; int ret ; ret = kfifo_out(fifo,&val , sizeof(val)); if(ret != sizeof(val)) return -EINVAL ; printk(KERN_INFO"%u\n",val); }


生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 欧美一级欧美三级在线观看 | 毛片免费在线观看网址 | 日本爱爱网站 | 免费一级欧美性大片 | 九色网址| 欧美一区二区三区视频在线观看 | 久久厕所精品国产精品亚洲 | 伊人蕉| 网站在线观看免费视频 | 日本一二三区在线视频 | 一区二区三区成人 | 日本特黄特色大片免费播放视频 | 视频三区 | 中文国产成人精品少久久 | 亚洲国产精品乱码一区二区三区 | 国产成人高清视频 | 国产性一交一乱一伦一色一情 | 2022国内精品免费福利视频 | 国产精品不卡片视频免费观看 | 国产成a人亚洲精v品久久网 | 456成人免费高清视频 | 最近中文字幕无吗 | 2022国产成人精彩在线视频 | 中文字幕巨大乳在线看 | 久久久久欧美国产精品 | 国产精品免费大片一区二区 | 亚洲精品久久一区影院 | 成人午夜视频一区二区国语 | 播放个毛片看看 | 男女羞羞网站 | 国产中文字幕在线视频 | 久久精品成人免费网站 | 男女上下爽无遮挡午夜免费视频 | 中欧free性video巴西 | free 英国性xxxxhd | 黄色网址免费在线 | 综合亚洲精品一区二区三区 | 欧美日韩欧美日韩 | 亚洲视频在线观 | 大香焦久久| 亚洲一区二区三区高清 |