2012-08-15 57 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 2012-08-15 19:46:48

+1

...或以允許的形式存在,所以我們在未回答的問題查詢中看不到這一點。謝謝。 – 2012-11-22 23:06:26

+0

@MvG和Barnabas:我已經添加了問題主體的答案,增加了一些細節(鏈接和解釋),作爲獨立的答案,因爲他似乎忽略了您的請求。我還提交了一個編輯,從問題主體中刪除他的回答。 – 2013-04-19 18:49:18

回答

2

您已通過get調用保存了以前的終端狀態;現在你只需要它在相同的方式set呼叫恢復爲您設置的新的狀態:

tcsetattr(STDIN_FILENO, TCSANOW, &oldt); 

(將來遊客:第二個參數是一個標誌,意味着會立即發生變化)

相關問題