我想在C中实现循环FIFO缓冲区。当我在Google上搜索代码示例时,我发现了link。我不明白这是否意味着循环FIFO缓冲器的概念已获得专利,每个想要使用它的人都必须拥有许可证?
祝福
答案 0 :(得分:4)
不,软件中的FIFO没有专利(当第一个FIFO算法被发明时没有软件专利 - 我不确定确切的日期,但软件专利是1990年代的现象,我在C64上使用了FIFO在1983年)。
该专利获得专利的是一个包含FIFO的硬件芯片,它具有某些特性,尤其是“在一个总线周期内执行多次传输”。
所以这不是你的通用16550 UART(每个时钟周期只能进行一次传输)。
通常,您每天编写的许多代码都已获得专利。通常,这不是问题,因为您的公司不受专利所有人的关注。但是,当他们决定他们不再喜欢你的那一天,除非你能花费数亿美元的律师费在法庭上为自己辩护,否则你就会遇到大麻烦,或者你自己拥有大量愚蠢的专利权你可以用来反击。
我收集了一些您可能想要阅读的文章:
答案 1 :(得分:0)
typedef struct red
{
int niz[MAX];
int f, r;
} RED;
int insert(RED buf, int info)
{
if (isFull(buf))
buf->f = (buf->f + 1) % MAX;
buf->r = (buf->r + 1) % MAX;
buf->niz[buf->r] = info;
return 1; }
答案 2 :(得分:-1)
// circular_queue.cpp : main project file.
#include "stdafx.h"
using namespace System;
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define max 3
int q[10];
int front=0;
int rear=-1;
int main()
{
int ch;
void insert();
void delet();
void display();
// clrscr();
printf("\n Circular Queue operations\n");
printf("1.insert \n 2.delete \n 3.display \n 4.exit \n");
while(1)
{
printf("Enter your choice:");
scanf("%d",&ch);
switch(ch)
{
case 1: insert(); break;
case 2: delet(); break;
case 3: display(); break;
case 4:exit(0);
default:printf("Invalid option\n");
}
}
return 0;
}
void insert()
{
int x;
if((front==0&&rear==max-1)||(front>0&&rear==front-1))
printf("Queue is overflow\n");
else
{
printf("Enter element to be insert:");
scanf("%d",&x);
if(rear==max-1&&front>0)
{
rear=0;
q[rear]=x;
}
else
{
if((front==0&&rear==-1)||(rear!=front-1))
q[++rear]=x;
}
}
}
void delet()
{
int a;
if((front==0)&&(rear==-1))
{
printf("Queue is underflow\n");
getch();
exit(0);
}
if(front==rear)
{
a=q[front];
rear=-1;
front=0;
}
else
if(front==max-1)
{
a=q[front];
front=0;
}
else a=q[front++];
printf("Deleted element is:%d\n",a);
}
void display()
{
int i,j;
if(front==0&&rear==-1)
{
printf("Queue is underflow\n");
getch();
exit(0);
}
if(front>rear)
{
for(i=0;i<=rear;i++)
printf("\t%d",q[i]);
for(j=front;j<=max-1;j++)
printf("\t%d",q[j]);
printf("\n rear is at %d\n",q[rear]);
printf("\n front is at %d\n",q[front]);
}
else
{
for(i=front;i<=rear;i++)
{
printf("\t%d",q[i]);
}
printf("\nrear is at %d\n",q[rear]);
printf("\nfront is at %d\n",q[front]);
}
printf("\n");
}
//getch();