2012-03-05 2 views
1

C에서 순환 FIFO 버퍼를 구현하고 싶습니다. Google에서 코드 샘플을 검색하는 동안이 코드는 link입니다. 이것이 원형 FIFO 버퍼의 개념이 특허를 받았으며이를 사용하고자하는 모든 사람이 라이센스를 가져야 함을 의미하는 것이 아닌지 이해할 수 있습니까? 나는 정확한 날짜 모르겠지만 소프트웨어 특허는 -순환 FIFO 버퍼 사용

보다도 아니, 소프트웨어 FIFO를 특허를하지 않는

+0

가 보이는 :

난 당신이 읽을 수있는 몇 가지 일부 기사를 모았습니다. 그래도 IANAL. –

+1

나는 또한 변호사도 아니지만 하드웨어 FIFO 버퍼에 대한 선행 기술이 없다는 생각은 우스꽝 스럽다. 필립스는 주요 전자 회사이지만 원형 FIFO 버퍼는 40 년 이상 TTL 전자 제품이 등장한 이래 공통적으로 사용되었습니다. 그들은 FIFO 버퍼를 포함하고있는 단일 실리콘이 1995 년 이래 거의 모든 PC에서 모든 직렬 포트의 일부인 16550 UART조차도이 특허를 침해하고 있다고 주장하는 것 같습니다. –

+1

이 특허는 순환 버퍼 하드웨어로 구현. 어쨌든, 당신이 그것에 대해 걱정할 수있는 특허 개념이 너무 많습니다. C의 순환 FIFO 버퍼에 대해서는 두려움없이 사용할 수 있습니다 (사용할 수없는 경우 많은 사람들이 문제가 될 수 있습니다 ...). – lvella

답변

4

IANAL

가 (첫 번째 FIFO 알고리즘이 발명 된 경우에는 소프트웨어 특허가 없었다 소원 1990 년대의 현상과 1983 년 C64에서 FIFO를 사용했다).

FIFO를 포함하고 특정 특성, 특히 "하나의 버스 사이클 동안 다중 전송이 수행되는"하드웨어 칩이 특허로 등록되어 있습니다.

따라서 일반적인 16550 UART (클럭 사이클 당 단 하나의 전송 만 수행 할 수 있음)가 아닙니다.

일반적으로 매일 작성하는 많은 코드가 특허를 받았습니다. 귀하의 회사가 특허 소유자의 레이더에 있지 않기 때문에 일반적으로 이것은 문제가되지 않습니다. 그러나 법원에서 변호 비용을 위해 수억 달러를 지출하지 않으면 엄청난 어려움을 겪게됩니다. 그렇지 않으면 엄청난 양의 바보 같은 특허가 있습니다. 당신이 싸울 수 있습니다. 특허는 버퍼의 하드웨어 구현을 포함처럼

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; } 
+0

설명하는 마음? – CinCout

-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(); 
+0

이 코드에서는 array int q [10];을 볼 수 있습니다. 10 개의 숫자를 저장합니다. –

+0

질문에 대한 답변이 아닙니다. –