如何在关闭回声后再次回输输入字符?

时间:2012-08-15 19:09:41

标签: c++ termios

我有这个代码,意思是在终端的登录界面隐藏我的密码。登录后,输入all仍为空白。如何在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 

1 个答案:

答案 0 :(得分:2)

您已经通过get call保存了之前的终端状态;现在您只需使用set调用以与设置新状态相同的方式恢复它:

tcsetattr(STDIN_FILENO, TCSANOW, &oldt);

(对于未来的访客:第二个参数是一个标志,表示将立即进行更改。)