Napisano: 23 Feb 2011 16:16
getpass() je izbacen iz POSIX standarda jos 2001 godine, mada ljudi i dalje koriste tu funkciju.
@Senor
Evo jednog primera, pitaj ako nesto nije jasno:
#include <stdio.h>
#include <stdlib.h>
#include <termios.h>
#include <string.h>
int main(int argc, char **argv)
{
struct termios oflags, nflags;
char lozinka[64];
/* Postavljamo terminal atribute
tcgetattr(): tcgetattr - get the parameters associated with the terminal
http://pubs.opengroup.org/onlinepubs/009695399/functions/tcgetattr.html
fileno(): fileno - map a stream pointer to a file descriptor
http://pubs.opengroup.org/onlinepubs/007908799/xsh/fileno.html
*/
tcgetattr(fileno(stdin), &oflags); // Cuvamo parametre u oflags
nflags = oflags;
nflags.c_lflag &= ~ECHO; // "gasimo" flag koristeci bitwise AND & i bitwise NOT ~
/* Ucitavamo izmenjene parametre
tcsetattr(): tcsetattr - set the parameters associated with the terminal
http://pubs.opengroup.org/onlinepubs/009695399/functions/tcsetattr.html
TCSANOW == Postavi izmene odmah
*/
if (tcsetattr(fileno(stdin), TCSANOW, &nflags) != 0) {
perror("Greska: tcsetattr poziv nije uspesan!");
return EXIT_FAILURE;
}
printf("Ukucajte lozinku: ");
fgets(lozinka, sizeof(lozinka), stdin); // Uzimamo karaktere
lozinka[strlen(lozinka) - 1] = 0; // Uklanjamo line feed
printf("\nVasa lozinka je: '%s'\n", lozinka);
/*
Vracamo terminal u predhodno stanje
*/
if (tcsetattr(fileno(stdin), TCSANOW, &oflags) != 0) {
perror("Greska: tcsetattr poziv nije uspesan!");
return EXIT_FAILURE;
}
return 0;
}
Evo koriscenja (testirano na Cygwin):
$ gcc -o noecho PassNoEcho.c
$ ./noecho.exe
Ukucajte lozinku:
Vasa lozinka je: 'habahabahaba'
Dopuna: 24 Feb 2011 22:09
@Senor
Izvini, ostao sam ti duzan za getch() verziju iz ncurses.h. U gornjem primeru smo koristili termios.h kako bi direktno manipulisali sa terminalom. Ako na svom distrou nemas instaliran ncurses, onda, recimo za Ubuntu, treba da instaliras libncurses5-dev paket.
Kako bi linkovao ncurses, program kompajliras sa:$ gcc -o nopassecho -lncurses nopassecho.c
Ovoga puta bez komentara, ali program radi tacno ono sto ti treba:
#include <stdio.h>
#include <string.h>
#include <ncurses.h>
#define MAXBUF 64
int ch = 0, i = 0;
char lozinka[MAXBUF] = {0};
int main(void){
initscr();
raw();
noecho();
printw("Unesite lozinku: ");
while((ch = getch()) != 0 && ch != '\n' && strlen(lozinka) < MAXBUF -1){
lozinka[i++] = ch;
printw("*");
}
lozinka[strlen(lozinka)] = '\0';
printw("\nVasa lozinka je \"%s\"", lozinka);
getch();
endwin();
return 0;
}
Ako nisi upoznat za ncurses programiranjem, pogledaj ovaj tutorijal: http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/
|