2012-08-15 2 views
2

터미널 로그인 화면에서 비밀번호를 숨길 수있는 코드입니다. 로그인 후에는 입력이 모두 공백입니다. getline이 완료된 후 어떻게 정상으로 되돌리려면 정상으로 설정합니까?에코를 해제 한 후 입력 문자를 다시 에코하는 방법은 무엇입니까?

#include <iostream> 
#include <string> 
#include <termios.h> 
#include <unistd.h> 

using namespace std; 

int main() 
{ 
    termios oldt; 
    tcgetattr(STDIN_FILENO, &oldt); 
    termios newt = oldt; 
    newt.c_lflag &= ~ECHO; 
    tcsetattr(STDIN_FILENO, TCSANOW, &newt); 

    string s; 
    getline(cin, s); 


    return 0; 
}//main 
+2

찾은 해결책을 답으로 작성하고 동의하십시오 (가능한 한 빨리). – MvG

+1

... 또는 허용 된 양식으로 답이없는 질문에서이 사실을 볼 수 없습니다. 고마워. –

+0

@MvG와 Barnabas : 귀하의 요청을 무시한 것처럼 보이기 때문에 독립된 답변으로 질문 본문의 답변을 추가했습니다 (링크 및 설명 추가). 또한 질문 본문에서 답을 삭제하기 위해 편집을 제출했습니다. –

답변

2

get 호출을 사용하여 이전 터미널 상태를 이미 저장했습니다.

tcsetattr(STDIN_FILENO, TCSANOW, &oldt); 

: 당신이 새로운 상태 설정으로 지금은 그냥 같은 방식으로 set 호출을 복원해야 (미래의 방문자를 들면 다음과 같습니다. 두 번째 매개 변수는 변경 사항이 즉시 발생합니다 의미 플래그입니다)

관련 문제