๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๊ฐœ๋ฐœ

[C์–ธ์–ด] readline ํ•จ์ˆ˜

๐ŸŒฑ char *readline(const char *);

readline์€ ์ž…๋ ฅ๋ฐ›์€ ๋ฌธ์ž์—ด์„ ์ €์žฅํ•˜๊ณ  ๊ทธ ๋ฉ”๋ชจ๋ฆฌ์ฃผ์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

 

๐ŸŒฑ ์ฝ”๋“œ์ž‘์„ฑ

- ์ •์˜๋œ ํ•จ์ˆ˜์— ๋Œ€ํ•ด์„œ ์ž˜ ๋ชจ๋ฅด๊ฒ ์„ ๋•, ์ง์ ‘ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์„œ ์‚ฌ์šฉํ•ด๋ณด๊ณ  ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•˜๋ฉฐ ์ตํžˆ๋Š”๊ฒƒ๋„ ์ข‹์€ ๋ฐฉ๋ฒ•์ด ๋  ์ˆ˜์žˆ๋‹ค.

/* readlineํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ์œ„ํ•œ ํ—ค๋” */
# include <readline/readline.h>

/* add_historyํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ์œ„ํ•œ ํ—ค๋” */
# include <readline/history.h>

/* printfํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ์œ„ํ•œ ํ—ค๋” */
# include <stdio.h>

/* freeํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ์œ„ํ•œ ํ—ค๋” */
# include <stdlib.h>

/* readlineํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•œ ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑํ•˜๊ธฐ */
int main(void)
{
/* readlineํ•จ์ˆ˜์˜ ๋ฆฌํ„ด๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ์œ„ํ•ด ์ž„์˜๋กœ ํฌ์ธํ„ฐ๋ฅผ ํ•˜๋‚˜ ์„ ์–ธํ•œ๋‹ค */
    char *str;
/* ๋ฌดํ•œ๋ฃจํ”„๋ฅผ ๋Œ๋ฆฌ๋ฉด์„œ readline();ํ•จ์ˆ˜๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ํ˜ธ์ถœํ•  ๊ฒƒ์ด๋‹ค */
    while(1)
    {
        /* readlineํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด ์ธ์ž(prompt : )๋ฅผ ํ„ฐ๋ฏธ๋„์— ์ถœ๋ ฅํ•˜๊ณ  ์ €์žฅํ•  ๋ผ์ธ์„ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค */
        str = readline("prompt : ");/* readํ•จ์ˆ˜๋Š” ์ €์žฅํ•œ ๋ฌธ์ž์—ด์˜ ๋ฉ”๋ชจ๋ฆฌ์ฃผ์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค */
        if (str)/* ์ž…๋ ฅ์ด ๋œ๋‹ค๋ฉด (์ฃผ์†Œ๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด) */
            printf("%s\n", str);/* ์ฃผ์†Œ์•ˆ์— ๋ฌธ์ž์—ด์„ ์ถœ๋ ฅํ•ด๋ณด์ž */
        else/* str = NULL ์ด๋ผ๋ฉด (EOF, cntl + D)*/
            break ;/* ๋ฐ˜๋ณต๋ฌธ์„ ํƒˆ์ถœํ•ด์ค€๋‹ค.*/
	/* add_history์— ์ €์žฅ๋œ ๋ฌธ์ž์—ด์€ up & down ๋ฐฉํ–ฅํ‚ค๋ฅผ ์ด์šฉํ•ด ํ™•์ธํ• ์ˆ˜์žˆ๋‹ค */
        add_history(str);
	/* ๋ผ์ธ์€ ํž™๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋˜๊ธฐ๋•Œ๋ฌธ์— ๋‹ค ์‚ฌ์šฉํ•œ ๋ฉ”๋ชจ๋ฆฌ๋Š” ํ• ๋‹น์„ ํ•ด์ œํ•ด์ค˜์•ผํ•œ๋‹ค */
        free(str);
    }
    /* ํ•จ์ˆ˜์ข…๋ฃŒ */
    return(0);
}

 

 

๐ŸŒฑ ์‹คํ–‰๊ฒฐ๊ณผ

- ์ •์ƒ์ ์ธ ์ปดํŒŒ์ผ์„ ์œ„ํ•ด์„œ ์˜ต์…˜์— readline ํด๋”๋ฅผ ๋ฐ˜๋“œ์‹œ ์ถ”๊ฐ€ํ•ด์ฃผ์ž! (gcc -l)

junselee /test gcc readline_test.c -lreadline	# -lreadline์„ ๊ผญ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.
junselee /test ./a.out                       
prompt : 
						# ์•„๋ฌด๊ฒƒ๋„ ์ž…๋ ฅํ•˜์ง€์•Š์œผ๋ฉด, ์•„๋ฌด๊ฒƒ๋„ ์ถœ๋ ฅํ•˜์ง€ ์•Š๋Š”๋‹ค.
prompt : HI					# "HI"๋ฌธ์ž๋ฅผ ์ž…๋ ฅ.
HI						# "HI"๋ฌธ์ž๋ฅผ ์ถœ๋ ฅ.
prompt : IM					# "IM"๋ฌธ์ž๋ฅผ ์ž…๋ ฅ.
IM						# "IM"๋ฌธ์ž๋ฅผ ์ถœ๋ ฅ.
prompt : JUNSELEE				# "JUNSELEE"๋ฌธ์ž๋ฅผ ์ž…๋ ฅ.
JUNSELEE					# "JUNSELEE"๋ฌธ์ž๋ฅผ ์ถœ๋ ฅ.
prompt : ^D%					# EOD(cntl + D)๋ฅผ ์ž…๋ ฅ.                                      
junselee /test					# ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ.

'๊ฐœ๋ฐœ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[vscode] ํ„ฐ๋ฏธ๋„ ์œ„์น˜๋ณ€๊ฒฝ  (0) 2021.11.21
[CPP] std::string ๋ฉค๋ฒ„ํ•จ์ˆ˜  (0) 2021.09.10
[Mac] ์•Œํ”„๋ ˆ๋“œ(Alfred)  (0) 2021.08.03