PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Standard Ein- Ausgabe vom Telnet-Client umleiten



SeCa
17-07-2003, 13:44
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:




#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 argc, char *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) < 0 ){
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(pid, NULL, 0) < 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

SeCa
17-07-2003, 14:47
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....


Danke für euere Hilfe

;)

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