Deprecated/42

MiniShell 기본함수 정리(readline.h)

susong 2022. 11. 8. 14:18
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);
}

실행결과

gcc 컴파일 간에 -lreadline 추가해주자


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님의 블로그를 발견해버렸다.

내가 정리하려고 한 내용보다 더 깊고 자세하게 설명한 그분의 필력에 무릎을 탁치며

남은 함수는 그냥 정리안하기로 마음먹었다.

프로그래머의 덕목 중 하나는 미리 만들어진 것을 잘 활용하는 것도 있기에

https://bigpel66.oopy.io/library/42/inner-circle/10

 

minishell

Subjects

bigpel66.oopy.io

728x90

'Deprecated > 42' 카테고리의 다른 글

MiniShell(42 미니쉘)을 정리하는 이유  (0) 2022.11.07