stdout hängt?
-
Hallo
bin nicht sicher ob es das richtige forum ist denn es geht auhc um sockets, aber das problem liegt denke ich am stdout und daher poste ich es mal hierrein.
also ich schreibe grad so zum lernen ein kleinen server/client programm
ist in etwa erstma nur ein echo server. und nun soll beim client bevor er etwas schreibt >>> oder sowas in der art kommen. wie kriege ich das hin? hier der entsprechende part:if ((childpid = fork())==0){ for(;;){ bytes = recv(sockfd, buffa2, 1337,0); buffa2[bytes] = '\0'; fputs(buffa2,stdout); //printf(">>>");printf(""); printf("\n"); } exit(0); } printf(">>>"); while(fgets(buffa1,1337,stdin) != NULL ) { if ( buffa1[0] == '\n') { kill(childpid, 9); exit(0); } send(sockfd, buffa1, strlen(buffa1)-1,0); }
also der child prozess liest immer vom socket und gibt das aus, der parent process liest vom stdin und gibt das aus
mit dem printf(">>>"); vor der while schleife stelle ich sicher das beim ersten input >>> da steht und man DAHINTER die stdin tätigt. das geht auch. aber beim nächsten mal soll es ja wieder so sein! wie muss ich dann ein weiteres printf einabuen, damit das geht?es muss ja in den child prozess rein
sagen wir im child prozess ersetze ich
fputs(buffa2,stdout);
durch
printf("%s\n>>>", buffa2);
müsste man doch annehmen das zuerst buffa2 ausgegeben wird, dann ein newline wo das >>> kommt und dann das caret um was einzugeben (das fgets vom parent )
stattdessen sieht das dann so aus:
moin
moin
testtest
schitschit
geht nixgeht nix
also das >>> soll beim ersten immer kommen weil das die eingabe ist, das 2. ist immer nur das echo
das komische ist bei printf("%s\n>>>", buffa2); steht doch ganz klar ERST ausgabe von buffa2 DANN >>> aber wie mans sieht macht der erst >>> dann ausgabe von buffa2... wie geht sowas?
ich hoffe ihr versteht was ich meine, ich versuche das seit 2 tagen irgendwie hinzukriegen, obwohl ich nix einfacheres will als ein >>> vor der einhabe...
kann mir wer helfen? danke
-
hier sieht man schön nochma das problem
printf("vorher");
fputs(buffa2,stdout);
printf("\n\nnachher");LOL
vorherLOLLOL
nachhervorherLOL
-
und hier siehts mans nochmal gut:
printf("vorher");
fputs(buffa2,stdout);
puts("\n>>>");LOL
vorherLOLTEST
vorherTESTBLUBB
vorherBLUBBMOEP
vorherMOEPgenauso ist es gedacht nur das das >>> vor der eingabe stehen muss. das ist ja hier so weil puts automatisch newline amcht, ergo wäre ein printf statt puts die lösung aller probleme ABER
printf("vorher");
fputs(buffa2,stdout);
printf("\n>>>");blubb
vorherblubb
blavorherbla
moepvorhermoep