Kay: Ein-/Ausgabeproblem in C

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

  1. 你好 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

    --
    So, wie ein Teil ist, ist das Ganze.
    http://wwwtech.de/
    1. ich verwende SuSE Linux...

      1. 你好 Kay,

        ich verwende SuSE Linux...

        Unter Linux gibt es “getpass()”. Einfach mal “man getpass” eingeben.

        再见,
         CK

        --
        Microsoft: Where do you want to go today?
        Linux: Where do you want to go tomorrow?
        FreeBSD: Are you guys coming, or what?
        http://wwwtech.de/
        1. 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

          1. 你好 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

            --
            No Shoes On Mat!
            http://wwwtech.de/
            1. 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

              1. 你好 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

                --
                Keine Schneeflocke faellt je auf die falsche Stelle.
                http://wwwtech.de/