2010-04-08 3 views
13

대학 과제를 위해 연습에서 C readline 함수를 사용하는 것이 좋습니다. 나는 그 참조를 찾았지만 아직도 그것을 발견하지 못했습니다. 그것은 실제로 존재합니까? 어떤 헤더에? 참조 링크를 게시 할 수 있습니까?C readline 함수

답변

15

Readline은 libreadlinelibedit (libeditline라고도 함)의 두 곳에 있습니다. 둘 다 동일한 인터페이스를 가지고 있습니다. 차이점은 libreadline은 GPL, libedit은 3 절 BSD로 라이센스된다는 것입니다. 라이센싱은 숙제에 대한 관심사가 아닙니다. 최소한 나는 생각하지 않습니다. 두 라이센스 중 하나를 사용하면 코드를 자유롭게 사용할 수 있습니다. readline에 링크하는 경우, readline을 제어하는 ​​GPL의 모든 버전을 만족시키는 전체 프로그램 GPL 2 or later을 작성하십시오. 시스템의 나이에 따라 GPL2 + 또는 GPL3 + 일 수 있습니다. 나는 양쪽 면허를 옹호하지 않고있어, 그건 너에게 달렸어.

참고 설치 중/또는주의를 가지고 (-lreadline또는-ledit또는-leditline)를 필요에 따라 연결 조정합니다. 둘 다 라이브러리이며 표준 C 라이브러리의 일부는 아닙니다.

편집 (군더더기가) :

야생에 프로그램을 해제하는 경우, 그 멋진 제스처는 사용자가 자신이 선택한 readline로를 구성 할 수 있습니다. 예를 들어, --with-readline 또는 --with-libedit 등이 있습니다. 이로써 최소한 readline까지 라이센스 선택에 부합하는 바이너리 패키지가 허용됩니다.

링크 : ReadlineEdit/Editline.

+3

이는'libedit'가 BSD 규칙을 야기한다는 것을 의미합니다. : P – Earlz

+0

예, 나는 그들이 현재 무엇인지 기억할 수는 없지만, 몇몇 시스템 이상에서'libedit'을'libeditline'으로 육체화한 것을 보았습니다. –

+0

또한 라이센스 중 하나에 연결하지 않았습니다. readline은 사용하는 버전에 따라 GPL2 이상 또는 GPL3이 될 수 있지만 3 절 BSD 라이센스는 정적으로 유지됩니다. –

-5

존재하지 않습니다.

그들은 실수로 stdio.h에서 gets()를 참조했습니다.

또한 읽기 매개 변수의 최대 크기가 없기 때문에 매우 안전하지 않은 기능이므로 즉각적인 보안 전체 (조회 버퍼 오버런 공격)가 발생합니다. 아래의 화난 주석처럼 fgets()를 대신 사용할 수 있습니다.

+11

아니요, ** 사용하지 마십시오 ** 'gets'- ever! –

+0

@Jerry +1 ... fgets를 사용 하시겠습니까? – LB40

+3

Jerry를 되돌리려면 :'gets'는 읽는 문자의 수를 제한하도록 지정하지 않습니다. 이것은 고정 길이 인 문자 배열을 읽으므로 나쁜 것입니다. 배열의 길이보다 긴 텍스트를 읽으면 버퍼 오버플로가 발생하여 프로그램이 충돌하거나 덮어 쓰지 않아도되는 메모리가 생길 수 있습니다. –

3

나는 그것이 표준 기능이라고 생각하지 않습니다.

나는 간단한 구현은 다음과 같이 될 것이다 : 그것은 MAX_LINE까지 읽을 수는 fgets()를 사용

char *Readline(char *in) { 
    char *cptr; 

    if (cptr = fgets(in, MAX_LINE, stdin)) { 
    /* kill preceding whitespace but leave \n so we're guaranteed to have something 
    while(*cptr == ' ' || *cptr == '\t') { 
     cptr++; 
    } 
    return cptr;  
    } else { 
    return 0; 
    } 
}

- '에'버퍼에 1 문자. 이전 공백을 제거하고 공백이 아닌 첫 번째 문자에 대한 포인터를 반환합니다.

+5

readline()은 명령 히스토리, 탭 완성, 간단한 행 편집 등을 제공합니다. –

+1

@Tim : 네 말이 맞아, Readline 라이브러리가 그러지 만, 나는 그 함수가 라인을 C char 배열로 읽길 원한다고 생각한다. – yassin

+3

나는 그가 도서관에 대한 링크를 원한다고 생각한다. –