[c] stdin + select

0

Rozumiem że w petli czeka sie na zkan konca linii zeby odgadnac ze stdin jest gotowe do odczytu, ale dlaczego nie wypisuje sie "AAA" umieszczone jeszcze przed petla i przed selectem ?!?!?!?

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <string.h>
#include <sys/time.h>
#include <unistd.h>


int main(int argc, char * argv[])
{
    fd_set readfds;
    struct timeval tv;
    printf("AAAA");
    tv.tv_sec = 10;
    tv.tv_usec = 0;
	while (1) {
		FD_ZERO(&readfds);
		FD_SET(STDIN_FILENO, &readfds);

		int select_retval = select(STDIN_FILENO+1, &readfds, NULL, NULL, &tv);
		if (select_retval < 0) {
			perror("select");
		} else if (select_retval > 0) {
		  if (FD_ISSET(STDIN_FILENO, &readfds)) {
		    printf("stdin");
		  }
		}
	}

    return 0;
}
0

chyba przed "AAAA" w printf powinien być jakiś parametr typu %s, czy %d. Poszukaj o nich w necie, bo nie programuje w c

0

grymson jak nie programujesz w C to nie gadaj bzdur ;)
printf() jest napisany poprawnie, bo czy napiszesz go tak czy:
printf("%s","bla bla"); nie zrobi w tym przypadku różnicy.

Błąd musi leżeć gdzieś indziej.

edit: @down mea culpa :P ale przecież wiadomo ze mówilismy o printf() bo scanfa tam w ogóle nie ma :)

0
Shalom napisał(a)

grymson jak nie programujesz w C to nie gadaj bzdur ;)
scanf() jest napisany poprawnie, bo czy napiszesz go tak czy:
scanf("%s","bla bla"); nie zrobi w tym przypadku różnicy.

Błąd musi leżeć gdzieś indziej.

jesli twierdzisz ze ten scanf jest poprawny ... :))
a jesli chodzilo Ci o printf - to %s jest potrzebny, poczytaj o bufferoverflow za pomoca printf(mojbuforznapisem)

@autor - pewnie dlatego ze stdout jest buforowany i wysyla zawartosc do urzadzenia dopiero jak uzbiera sie pewna ilosc danych (a u Ciebie z racji while(1) raczej program wiele wiecej nie wypisze na stdouta), albo jak mu sie explicite nakaze -> printf(...); fflush(stdout);

1 użytkowników online, w tym zalogowanych: 0, gości: 1