⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ring.c

📁 中科院徐志伟老师一书《操作系统 原理·技术与编程》的源代码和习题接
💻 C
字号:
#include <unistd.h>
#include <linux/kernel.h>
#include "ring.h"
int  tag=0;
int * psudo_head=NULL;

void ring_buf_init(ring_buf *round)
{
        round->signature=R_SIGNATURE;
        round->head=round->buffer;
        round->tail=round->buffer;
        round->begin=round->buffer;
        round->end=&round->buffer[sizeof(round->buffer)-1];
}

/**   read the user_defined value from the ring_buffer,
 **    if no value available 0 is returned, on error -1 is
 **    returned, on success 1 is returned **/

int ring_buf_read(ring_buf *round,int *val)
{
        int* tmp=round->tail;

        if(round->signature !=R_SIGNATURE){
                printk("ring_buf_read:signature fake\n");
                return(-1);
        }

        if((tmp<round->begin)||(tmp>round->end)){
                printk("ring_buf_read:tail bad\n");
                return(-1);
        }

        if(tmp==round->head){
              return(0);
        }

        *val=*tmp++;

        if(tmp>round->end)
                tmp=round->begin;
        round->tail=tmp;
        if(tag){
                round->head=psudo_head;
                tag=0;
        }

        return(1);
}
/*
*
*/
int ring_buf_write(ring_buf *round,int val)
{
        int* tmp=round->head;

        if(round->signature !=R_SIGNATURE){
        	                printk("ring_buf_write:signature fake\n");
                return(-1);
        }
        if((tmp<round->begin)||(tmp>round->end)){
                printk("ring_buf_write:head bad\n");
                return(-1);
        }

        if(tag)
                return 0;
        (*tmp)=val;
        tmp++;

        if(tmp>round->end)
                tmp = round->begin;

        if(tmp==round->tail){
                tag=1;
                psudo_head=tmp;
                return(1);
        }
        round->head=tmp;
        return(1);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -