Получение пароля в C, не используя getpass (3)?

вам нужно использовать метод onSavedInstanceState, чтобы сохранить все значения для его параметра, который имеет связку

@Override
    public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
        super.onSaveInstanceState(outState, outPersistentState);
        outPersistentState.putBoolean("key",value);
    }

и использовать

@Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        savedInstanceState.getBoolean("key");
    } 

, чтобы извлечь и установить значение на просматривать объекты он будет обрабатывать поворот экрана

22
задан Jerry Penner 28 July 2009 в 20:24
поделиться

4 ответа

это должно работать в linux / macosx, версия для Windows должна использовать Get / Set ConsoleMode

#include <stdio.h>
#include <stdlib.h>
#include <termios.h>

int
main(int argc, char **argv)
{
    struct termios oflags, nflags;
    char password[64];

    /* disabling echo */
    tcgetattr(fileno(stdin), &oflags);
    nflags = oflags;
    nflags.c_lflag &= ~ECHO;
    nflags.c_lflag |= ECHONL;

    if (tcsetattr(fileno(stdin), TCSANOW, &nflags) != 0) {
        perror("tcsetattr");
        return EXIT_FAILURE;
    }

    printf("password: ");
    fgets(password, sizeof(password), stdin);
    password[strlen(password) - 1] = 0;
    printf("you typed '%s'\n", password);

    /* restore terminal */
    if (tcsetattr(fileno(stdin), TCSANOW, &oflags) != 0) {
        perror("tcsetattr");
        return EXIT_FAILURE;
    }

    return 0;
}
14
ответ дан 29 November 2019 в 05:33
поделиться

Вы можете использовать библиотеку ncurses для чтения со стандартного ввода без вывода результатов на экран. (Вызовите noecho () , прежде чем получать какие-либо данные). Библиотека существует уже много лет и работает на самых разных платформах (версию для Windows можно найти здесь )

4
ответ дан 29 November 2019 в 05:33
поделиться

Согласно документации Университета Милуоки она устарела, потому что:

Функция getpass () не является потокобезопасной, потому что она манипулирует состояние глобального сигнала.

Функция getpass () планируется исключить из будущей версии спецификации X / Open CAE.

2
ответ дан 29 November 2019 в 05:33
поделиться

В Windows вы, вероятно, можете использовать API SetConsoleMode , описанный здесь .

1
ответ дан 29 November 2019 в 05:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: