getch() 함수로 문자를 사용할 수 있는지 확인하십시오. no-delay 모드에서이 메서드를 사용하면 메서드가 차단되지 않습니다. 그런 다음 '\ n'이 발생할 때까지 문자를 먹어서 각 문자열을 결과 문자열에 추가해야합니다.
그리고 - 그리고 내가 사용하는 방법 -은 GNU readline 라이브러리를 사용하는 것입니다. non-blocking behavior에 대한 지원이 있지만 해당 섹션에 대한 문서는 그리 우수하지 않습니다.
여기에 포함 된 작은 예제를 사용할 수 있습니다. 그것은 선택 루프를 가지고 있으며, GNU의 readline 라이브러리를 사용
#include <stdio.h>
#include <readline/readline.h>
#include <readline/history.h>
#include <stdlib.h>
#include <stdbool.h>
int quit = false;
void rl_cb(char* line)
{
if (NULL==line) {
quit = true;
return;
}
if(strlen(line) > 0) add_history(line);
printf("You typed:\n%s\n", line);
free(line);
}
int main()
{
struct timeval to;
const char *prompt = "# ";
rl_callback_handler_install(prompt, (rl_vcpfunc_t*) &rl_cb);
to.tv_sec = 0;
to.tv_usec = 10000;
while(1){
if (quit) break;
select(1, NULL, NULL, NULL, &to);
rl_callback_read_char();
};
rl_callback_handler_remove();
return 0;
}
컴파일을 가진 : 나는 때문에 ncurses를의 현재 스레드를 사용해야하는 경우 내가 할 수 있기 때문에
gcc -Wall rl.c -lreadline
그럼 기본적으로 나는 궁금하네요 하지만 select 만 사용하는 것만 큼 우아하지는 않습니다. 내가 생각할 수있는 유일한 다른 옵션은 모든 문자를 읽고 급진적 인 처리를 시도하는 것입니다. 이것은 심지어 더 복잡 할 수있는 것처럼 보입니다. – graw