readline 라이브러리

개요

minishell 과제에서 필요한 readline 라이브러리에 대해 알아보고 라이브러리에 있는 함수들에 대해 알아보고 컴파일 방법에 대해 알아보겠다.




라이브러리


readline 라이브러리는 GNU에서 만든 라이브러리로 입력 자동 완성, 커서 이동, 잘라내기, 복사, 붙여넣기 등의 기능을 지원하는 줄 편집 및 입력 기록 저장등의 역할을 하는 라이브러리이다.




헤더 선언


#include <readline/readline.h>

#include <readline/history.h>

위와 같은 형식으로 사용한다.




컴파일 방법


-lreadline 컴파일 옵션을 사용해야 한다.




컴파일 에러


rl_replace_line을 사용할 수 없다고 에러가 나올 수 있다.

readline 라이브러리는 2가지가 존재하는데 Mac 버전, GNU Library 버전이 있는데 위의 컴파일 옵션을 사용하면 Mac 버전 라이브러리를 사용하기 때문에 추가적으로 옵션을 줘야한다.


GNU readline 설치

brew install readline


GNU readline 정보 확인

brew info readline

정보 확인을 하면 readline 라이브러리를 사용하기 위한 플래그옵션과 설치 위치가 나온다.

그대로 복붙하여 사용하면된다.




함수



readline


  • 함수 원형 : char *readline(const char *);
  • 함수 라이브러리 : #include <readline/readline.h>
  • const char * : 출력할 문자열
  • 리턴값 : 개행을 받기전까지의 문자열
  • 설명 : 매개변수로 들어온 문자열을 출력하고 개행을 받기전까지 표준 입력받은 값을 반환해주는 함수

사용 예시

1
2
3
4
5
6
int main(){
    char *line;
    
    line = readline("input> ");
    printf ("%s", line);
}




add_history


  • 함수 원형 : int add_history(const char *);
  • 함수 라이브러리 : #include <readline/history.h>
  • const char * : 기록할 문자열
  • 설명 : 이전에 입력한 문자열을 기록하는 함수

사용 예시

1
2
3
4
5
6
7
8
9
int main(){
    char *line;
    
    while(1){
        line = readline("input> ");
        printf ("%s\n", line);
        add_history(line);
    }
}




rl_on_new_line


  • 함수 원형 : int rl_on_new_line();
  • 함수 라이브러리 : #include <readline/readline.h>
  • 설명 : 다음 줄로 옮기는 함수, rl_redisplay를 사용하기 위해 필요함




rl_replace_line


  • 함수 원형 : void rl_replace_line(const char str*, int);
  • 함수 라이브러리 : #include <readline/readline.h>
  • 설명 : 파라메터의 문자열로 치환한다.




rl_redisplay


  • 함수 원형 : void rl_redisplay(void);
  • 함수 라이브러리 : #include <readline/readline.h>
  • 설명 : readline을 다시 뿌려주는 함수