Anzeige:
Ergebnis 1 bis 2 von 2

Thema: Standard Ein- Ausgabe vom Telnet-Client umleiten

  1. #1
    Registrierter Benutzer Avatar von SeCa
    Registriert seit
    07.11.2002
    Beiträge
    64

    Standard Ein- Ausgabe vom Telnet-Client umleiten

    Hallo leute,
    ich hab ein kleines Problem.
    Wenn ich in der Konsole
    telnet localhost
    eingebe, kommt schön die auforderung nach dem login. Und die Verbindung bleibt offen.
    Wenn ich nun allerdings die Standardeingabe vom telnet-client über eine pipe zu meinem programm leite, und dann in die pipe "open localhost" schreibe, bleibt die Verbindung nicht offen sondern wird gleich wider geschlossen. Wisst ihr wie ich die verbindung offen behalten kann?

    Hier noch mein Code:

    PHP-Code:

    #include <math.h>
    #include <sys/wait.h>
    #include <sys/types.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>


    int main(char argcchar *argv[]){
        
    long    von,bis,i,teiler,zahl,wurzel;
        
    int        fd_to_child[2],fd_from_child[2];
        
    pid_t    pid;
        
    FILE     *schreib_dz;

        
        if(
    pipe(fd_to_child) < ){
            
    printf("Kann keine Pipe einrichten\n");
            exit(
    0);
        }

        if(
    pipe(fd_from_child) < 0){
            
    printf("Kann keine Pipe einrichten\n");
            exit(
    0);
        }

        if((
    pid fork()) < 0){
            
    printf("Konnte aus mir nicht noch eins machen :-( (fork)\n");
            exit(
    0);
        }


        
    //******** Elternprozess *********
        
    else if(pid 0){
            
    close(fd_to_child[0]);
            
    close(fd_from_child[1]);
            if(( 
    schreib_dz fdopen(fd_to_child[1], "w")) == NULL){
                
    printf("fdopen-Fehler\n");
                exit(
    0);
            }

            
    //for(i =0; i<=10000; i++){
            //    fprintf(schreib_dz,"\n %i",i);
            //}

            
    fprintf(schreib_dz,"open localhost");
            
    //fprintf(schreib_dz,"NICK sebi\n");
            //fprintf(schreib_dz,"USER sebi bsei bsieb sie\n");


            
    fclose(schreib_dz);
            if(
    waitpid(pidNULL0) < 0){
                
    printf("Waitpid-Fehler\n");
                exit(
    0);
            }
            exit(
    0);
        }

        
    //******** Kindprozess ********
        
    else {
            
    close(fd_to_child[1]);
            
    close(fd_from_child[0]);
            if(
    fd_to_child[0] != STDIN_FILENO){
                if(
    dup2(fd_to_child[0], STDIN_FILENO) != STDIN_FILENO){
                    
    printf("Fehler bei dup2 fuer stdin\n");
                    exit(
    0);
                }
                
    close(fd_to_child[0]);
            }

            
    //if(fd_from_child[1] != STDOUT_FILENO){
            //    if(dup2(fd_from_child[1], STDOUT_FILENO) != STDOUT_FILENO){
            //        printf("Fehler bei dup2 fuer stdout\n");
            //        exit(0);
            //    }
            //    close(fd_from_child[1]);
            //}

            
    if(execl("/usr/bin/telnet","TELNET-CLIENT",NULL) <0){
                
    printf("Fehler bei execl-Aufruf für TELNET\n");
                exit(
    0);
            }
        }


    Achja ... sollte ich irgendwo standard falsch geschrieben haben ist mir das egal

    Grüsse SeCa

  2. #2
    Registrierter Benutzer Avatar von SeCa
    Registriert seit
    07.11.2002
    Beiträge
    64
    Ok ich weis jetzt was ist.... Ich habe die Pipe zu früh geschlossen. Da hat telnet geglaubt ich hätte ^D gedrückt und sich beendet....


    [ironie] Danke für euere Hilfe [/ironie]



    Lol müsste ich das jetzt in zwei ironie-tags tun damit ihr das richtig versteht.....

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •