我有此代码,目的是在终端的登录屏幕上隐藏我的密码。登录后,所有输入仍为空白。 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

最佳答案

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

tcsetattr(STDIN_FILENO, TCSANOW, &oldt);

(对于将来的访问者:第二个参数是一个标志,表示更改将立即发生。)

关于c++ - 关闭回声后如何再次回声输入字符?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11975603/

10-10 17:49