• Ring Buffer -- C语言


    #include <stdint.h>
    #include <stdlib.h>
    #include <string.h>
    #include <stdio.h>#define MIN(a, b)               ((a) < (b) ? (a) : (b))
    #define MAX(a, b)               ((a) > (b) ? (a) : (b))
    
    uint32_t RingBuf_Write(uint8_t *rbuf, uint32_t maxsize, uint32_t tail, uint8_t *src, uint32_t len)
    {
        uint8_t *buf1 = rbuf + tail;
        int      len1 = MIN(maxsize-tail, len);
        uint8_t *buf2 = rbuf;
        int      len2 = len  - len1;
        memcpy(buf1, src + 0   , len1);
        memcpy(buf2, src + len1, len2);
        return len2 ? len2 : tail + len1;
    }
    
    uint32_t RingBuf_Read(uint8_t *rbuf, uint32_t maxsize, uint32_t head, uint8_t *dst, uint32_t len)
    {
        uint8_t *buf1 = rbuf + head;
        int      len1 = MIN(maxsize-head, len);
        uint8_t *buf2 = rbuf;
        int      len2 = len  - len1;
        if (dst) memcpy(dst + 0   , buf1, len1);
        if (dst) memcpy(dst + len1, buf2, len2);
        return len2 ? len2 : head + len1;
    }
    int main(int argc, char *argv[]){
        int maxsize = 4;
        uint8_t  * rbuf = malloc(maxsize);
        int tail = 0;
        uint8_t * src = "hello";
        uint32_t  len = strlen(src);
        uint32_t  out = RingBuf_Write(rbuf,maxsize,tail,src,len);
        printf("out:%d
    ",out);
        printf("rbuf:%s
    ",rbuf);
    
        printf("---------
    ");
    
        int head = 0;
        uint8_t *dst = malloc(8);
        uint32_t ret = RingBuf_Read(rbuf,maxsize,head,dst,2);
    
        printf("ret:%d
    ",ret);
        printf("dst:%s
    ",dst);
    
    
        return 0;
    }

    摘录自:https://github.com/rockcarry/ffrdp

  • 相关阅读:
    2020软件工程02
    自我介绍
    2019年春总结作业
    第十二周作业
    第十一周作业
    第十周作业
    第九周作业
    第八周作业
    第七周学习总结
    第六周学习总结
  • 原文地址:https://www.cnblogs.com/iuyy/p/13776589.html
Copyright © 2020-2023  润新知