C/C++实现FIFO(FIFO满,写失败;FIFO空,读失败

FIFO满,写失败;FIFO空,读失败

#include <stdio.h>

#define BUFSIZE     10
#define FIFOFULL    -1
#define FIFOEMPTY   -2
#define RWOK         0

typedef struct FifoType {
    unsigned int buffer[BUFSIZE]; /* Circular buffer */
    unsigned int w_index;         /* Index of write */
    unsigned int r_index;         /* Index of read */
    unsigned int maybefull;
}*pFifoType;

int WriteFIFO(pFifoType priv, int data)
{
    if ((priv->w_index == priv->r_index) && (priv->maybefull == 1))
        return FIFOFULL;
    else
    {
        priv->buffer[priv->w_index] = data;
        priv->w_index++;
        if (priv->w_index >= BUFSIZE)
        {
            priv->w_index -= BUFSIZE;
            priv->maybefull = 1;
        }
        return RWOK;
    }
}

int ReadFIFO(pFifoType priv)
{
    int dataout;
    if ((priv->r_index == priv->w_index) && (priv->maybefull == 0))
        return FIFOEMPTY;
    else
    {
        dataout = priv->buffer[priv->r_index];
        priv->r_index++;
        if (priv->r_index >= BUFSIZE)
        {
            priv->r_index -= BUFSIZE;
            priv->maybefull = 0;
        }
    }
    return dataout;
}

void main()
{
    int i = 0;
    unsigned int data = 0;
    pFifoType priv = new FifoType;
    priv->r_index = 0;
    priv->w_index = 0;
    priv->maybefull = 0;

    for (i = 0; i < 12; i++)
        printf("%d->%d\n", WriteFIFO(priv, i),priv->w_index);
    printf("\n");
    for (i = 0; i < 12; i++)
    {
        printf("%d->%d\n", ReadFIFO(priv),priv->r_index);
    }

    printf("\n");
    delete priv;
    priv = NULL;
}

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值