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
    test

    test
    schit

    schit
    geht nix

    geht 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
    vorherLOL

    LOL
    nachhervorherLOL



  • und hier siehts mans nochmal gut:

    printf("vorher");
    fputs(buffa2,stdout);
    puts("\n>>>");

    LOL
    vorherLOL

    TEST
    vorherTEST

    BLUBB
    vorherBLUBB

    MOEP
    vorherMOEP

    genauso 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
    bla

    vorherbla
    moep

    vorhermoep


Log in to reply