readline (rl_prep_terminal) 사용법 질문

yeilho의 이미지

readline을 사용하려고 하는데 잘 안되는 군요.

아래와 같이 간단한 프로그램이 있는데, 요는 rl_prep_terminal()을 호출을 하면 바로 Seg fault가 나오는 군요.
아마도 또 다른 셋팅을 해 주어야 하는것 같은데 정보를 잘 못찾겠네요.
혹시 어떻게 문제를 풀어야 할지 아시는분 있으시면 답변 부탁드립니다.
감사합니다.

일호 <><

#include <stdio.h>
#include <stdlib.h>
#include <readline/readline.h>
 
int main(int argc, char*argv[])
{
    char *line;
 
    rl_prep_terminal(0);
    while (1) {
        line = readline("#");
        if (!line)
            break;
        printf("%s", line);
        free(line);
    }
    rl_deprep_terminal();
    return 0;
}

yeilho의 이미지

이래 저래 gdb로 디버깅 하다보니 rl_prep_terminal()이 fileno()를 호출 하는데 여기서 문제가 있다는것을 찾았습니다.

요는 전달하는 인자가 초기화 되어 있지 않아서 문제를 일으켰는데, 궁금한것은 전달 인자는 readline() 내부에서 사용하는 변수인데 왜 초기화 안되었는지 모르겠네요.

어찌 되었든 해당 변수 rl_instream 를 extern으로 선언하고 제 프로그램에서 초기화 유무 확인한 후, 제가 직접 초기화 시키니 제대로 동작하네요. ;-)

혹시 다른 식으로 문제를 해결하신 경험이 있으시면 조언 부탁합니다.

Linux rules!!!

Linux rules!!!