간단한 프롬프트를 만드려고 합니다. 표준입력 내용을 보존하고 싶습니다.
글쓴이: ep6tri / 작성시간: 일, 2009/05/24 - 6:53오후
C/C++로 간단한 프롬프트 프로그램을 만드려고 합니다.
mysql 프롬프트 같다고 생각하면 됩니다. 프로그램을 실행하면 아주 단순한 프롬프트가 나오면 됩니다.
한편 이 프로그램은 스레드나 프로세스를 만들어서 다른 역할을 하나 더 수행하는데,
표준 출력으로 문자를 출력하는 부분도 있습니다.
그러니까, 이런 셈이지요
int main() { // 스레드를 2개 생성합니다. // 스레드 1은 프롬프트로 입력을 받는 함수를 수행합니다. // 스레드 2는 어떤 역할을 수행합니다. 문자열을 출력하기도 하지요 .... 적절한 코드 .... } void* function1( ... ) { 스레드 1번이 수행하는 함수입니다. 프롬프트를 띄우고 사용자로부터 입력을 받습니다. fgets(...) ...등을 사용합니다. } void* function2( ... ) { 스레드 2번이 수행합니다. 어떤 일을 하고, 표준 출력으로 메시지를 보내기도 합니다. }
그러다 보니 이런 문제를 발견하였습니다.
사용자가 열심히 타이핑을 하는 중에 스레드 2번이 메시지를 출력하였습니다.
별다른 처리를 하지 않으면 스레드 2번이 출력하는 메시지 때문에
1번 스레드에서 입력 중인 내용이 모니터에서는 사라져버립니다.
엔터를 쳐서 입력된 내용을 확인해보면 처음부터 입력한 내용이 전부 출력므로,
내용이 유실되는 것이 아닌 것은 다행입니다.
하지만 2번 스레드가 출력을 끝마친 후에는 사용자가 입력된 내용이 모두 보존되어 나와 있는 것이
더 좋아 보입니다.
하지만 막상 그렇게 하는 방법은 모르겠습니다.
제가 생각한 방법이 가장 매끈하게 표현되어 있는 것으로는 배쉬 쉘이 있겠네요..
메시지가 출력되는 중에도 입력을 넣을 수 있고, 출력이 끝난 후 입력된 내용이 프롬프트와 함께 가지런히 잘 보존되어 나옵니다.
입력한 문자를 백스페이스로 다시 지울수도 있구요.
어떻게 이렇게 하는지 궁금합니다.
구현하는 방법이 어렵다면, 호기심으로 원리나마 알고 싶습니다..
도움을 부탁드립니다.
Forums:
스레드 2의 출력
스레드 2의 출력 내용을 표준 출력으로 바로 보내지 않고
일단 버퍼에 보존하였다가 적절한 타이밍 (프롬프트가 뜨기 직전 등) 에
flush 를 시켜주면 어떨까요?
댓글 달기