This is a multi-part message in MIME format. --------------06ABE856A0D5D136FD32EE58 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable Leander Rumo wrote:
=
nun: wie kann man dieses "problem" unter linux - gnu c++ eliminieren ?
Es gab zwar schon einige Antworten, aber anbei eine L=F6sung ohne den Overhead einer curses-library. = Die Funktion liest unsichtbar ein Pa=DFwort. Ich schicke sie, weil sie einige korrekte Konzepte aufzeigt. Ciao Andreas Mock --------------06ABE856A0D5D136FD32EE58 Content-Type: text/plain; charset=us-ascii; name="getpass.c" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="getpass.c" #include <signal.h> #include <stdio.h> #include <termios.h> #define MAX_PASS_LEN 8 /* max #chars for user to enter */ char* getpass(const char *prompt) { static char buf[MAX_PASS_LEN + 1]; /* null byte at end */ char *ptr; sigset_t sig, sigsave; struct termios term, termsave; FILE *fp; int c; if ((fp = fopen(ctermid(NULL), "r+")) == NULL) return(NULL); setbuf(fp, NULL); /* block SIGINT & SIGTSTP, save signal mask */ sigemptyset(&sig); sigaddset(&sig, SIGINT); sigaddset(&sig, SIGTSTP); sigprocmask(SIG_BLOCK, &sig, &sigsave); tcgetattr(fileno(fp), &termsave); /* save tty state */ term = termsave; /* structure copy */ term.c_lflag &= ~(ECHO | ECHOE | ECHOK | ECHONL); tcsetattr(fileno(fp), TCSAFLUSH, &term); fputs(prompt, fp); ptr = buf; while ((c = getc(fp)) != EOF && c != '\n') { if (ptr < &buf[MAX_PASS_LEN]) *ptr++ = c; } *ptr = 0; /* null terminate */ putc('\n', fp); /* we echo a newline */ /* restore tty state */ tcsetattr(fileno(fp), TCSAFLUSH, &termsave); /* restore signal mask */ sigprocmask(SIG_SETMASK, &sigsave, NULL); fclose(fp); /* done with /dev/tty */ return(buf); } --------------06ABE856A0D5D136FD32EE58-- -- Um aus der Liste ausgetragen zu werden, eine Mail an majordomo@suse.de schicken, mit dem Text: unsubscribe suse-linux
participants (1)
-
Andreas.Mock@augsburg.baynet.de