728x90
readline을 사용하기 전에
이 글을 읽고 있는 당신은 MAC OS를 사용중인가?
그렇다면, 당신은 높은 확률로 아래 함수를 실행하기 위해 별도의 조치가 필요하지 않다.
그저 gcc 컴파일에서 -lreadline 옵션하나만 주면 모든 일이 끝나니까 말이다
하지만, 당신이 UNIX 계열의 OS를 이용중이라면 추가적인 조치가 필요하다.
진행하다가 컴파일이 안된다면, GNU 라이브러리를 찾아서 gcc -I -L 옵션을 이용, 포함시켜주자
readline
의존성
#include <stdio.h>
// FILE 구조체 이용을 위함
#include <readline/readline.h>
함수원형
char *readline(const char *prompt);
사용방법
readline은 터미널에서 한 줄을 읽고 다음을 사용하여 반환합니다.
프롬프트가 NULL이거나 빈 문자열이면 프롬프트는 작동하지 않습니다.
반환된 줄은 malloc을 통해 할당됩니다.
그렇기 때문에 Readline으로 호출한 결과값은 사용 후 메모리 해제해주어야 합니다.
결과값 마지막에는 줄 바꿈이 제거되어 줄의 텍스트만 남습니다.
예제코드
#include <readline/readline.h>
#include <readline/history.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char *str;
// readline 결과값을 저장하기 위한 str
while (1)
{
str = readline("prompt : ");
// readline은 입력의 결과를 동적할당하여 메모리 주소값을 반환한다.
if (str)
printf("%s\n", str);
else
break;
add_history(str);
// add history에 저장된 녀석들은 우리가 직전 명령어를 불러오듯 확인할 수 있다
// up down 키로 저장된 역사 확인 가능
free(str);
// 다 사용한 str은 free해주자!
}
return (0);
}
실행결과
rl_redisplay
의존성
#include <stdio.h>
// FILE 구조체 이용을 위함
#include <readline/readline.h>
함수원형
void rl_redisplay(void);
사용방법
rl_line_buffer에 저장되어 있는 값을 프롬프트에 출력해주는 함수로 void형이다.
즉, 반환값이 없이 저장된 값을 출력하기 위해 사용하는 함수이다.
rl_on_new_line
의존성
#include <readline/readline.h>
함수원형
int rl_on_new_line(void);
사용방법
일반적으로 줄 바꿈을 출력한 후 다음(빈)줄로 이동했음을 업데이트 루틴에 알리는 함수이다.
개행이 나온 이후에, 업데이트 루틴에 개행이 나왔음을 알려주기 위해 사용한다.
Int형 함수로, 정상 실행시 0 비정상 실행시 -1을 반환한다.
미니쉘을 위해 열심히 함수를 정리하다보니.. 이미 앞서 간 jseo님의 블로그를 발견해버렸다.
내가 정리하려고 한 내용보다 더 깊고 자세하게 설명한 그분의 필력에 무릎을 탁치며
남은 함수는 그냥 정리안하기로 마음먹었다.
프로그래머의 덕목 중 하나는 미리 만들어진 것을 잘 활용하는 것도 있기에
728x90
'Deprecated > 42' 카테고리의 다른 글
MiniShell(42 미니쉘)을 정리하는 이유 (0) | 2022.11.07 |
---|