Ein-/Ausgabeproblem in C
Kay
- programmiertechnik
0 Christian Kruse0 Kay0 Christian Kruse0 Kay
Hallo,
ich bin gerade dabei, ein simples Passwort-Abfrageprogramm in C zu schreiben. Zum Einlesen einer Taste nutze ich die Funktion getchar() aus der stdio-Bibliothek. Leider wird das eingegebene Zeichen dabei in Klartext auf dem Bildschirm angezeigt. Wie kann ich diese Anzeige undrücken? Anschließend setze ich dann mit putchar() ein * statt dem eingegebenen Zeichen. Hab' allerdings keine Ahnung, wie ich diese Ausgabe von getchar() verhinere.
Vielen Dank für Hilfe,
Kay
你好 Kay,
ich bin gerade dabei, ein simples Passwort-Abfrageprogramm in C zu
schreiben. Zum Einlesen einer Taste nutze ich die Funktion getchar()
aus der stdio-Bibliothek. Leider wird das eingegebene Zeichen dabei in
Klartext auf dem Bildschirm angezeigt. Wie kann ich diese Anzeige
undrücken?
So ohne weiteres gar nicht. Das geht nur plattformspezifisch -- da musst du
schon sagen, welche Plattform du verwendest :)
再见,
CK
ich verwende SuSE Linux...
你好 Kay,
ich verwende SuSE Linux...
Unter Linux gibt es “getpass()”. Einfach mal “man getpass” eingeben.
再见,
CK
Hallo,
es geht mir nicht um irgendwelche Shell-Kommandos; ich will das ganze in einem C-Programm realisieren:
#include <string.h>
int getpasswd(char *s,int n){
strcpy(s,"");
int i=0;
while(i<n){
char ch=getchar();
if(ch=='\n'||ch=='\r')return i;
if((int)ch>32){
putchar('*');
s[i]=ch;
i++;
}
}
return i;
}
und jetzt habe ich halt das Prob, dass die eingegebenen Zeichen im Klartext auf dem Bildschirm erscheinen.
MfG, Kay
你好 Kay,
es geht mir nicht um irgendwelche Shell-Kommandos;
Ich habe schon verstanden, was du willst. Das ist auch kein Shell-Kommando,
sondern eine Bibliotheks-Funktion. Bitte lies doch erst die Dokumentation,
die ich dir gegeben habe.
再见,
CK
Hi,
das Prob ist, dass dies eine Programmieraufgabe ist und diese Funktionen explizit verwendet werden sollen - praktisch eine Nachbildung der von dir genannten Funktion.
Grüße, Kay
你好 Kay,
das Prob ist, dass dies eine Programmieraufgabe ist und diese Funktionen
explizit verwendet werden sollen - praktisch eine Nachbildung der von dir
genannten Funktion.
Das naechste mal, wenn du eine Frage stellst, nenne bitte alle Parameter,
jetzt habe ich umsonst nachgesehen, wie die richtige[tm] Funktion heisst.
Whatever, in dem Fall schau dir tcsetattr() und tcgetattr() an. Beispiel:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <paths.h>
int main(void) {
FILE *term;
struct termios tios;
int termfd;
int saved_flags;
if(!(term = fopen(_PATH_TTY,"r+"))) return EXIT_FAILURE;
termfd = fileno(term);
tcgetattr(termfd,&tios);
saved_flags = tios.c_lflag;
tios.c_lflag &= ~(ECHO|ECHOE|ECHOK|ECHONL);
tcsetattr(termfd,TCSAFLUSH,&tios);
/* irgendwas machen */
tios.c_lflag = saved_flags;
tcsetattr(termfd,TCSAFLUSH,&tios);
fclose(term);
return EXIT_SUCCESS;
}
再见,
CK