[so] demo curs 1 Intrebari:

Ioana Antoche antoche.ioana at gmail.com
Mon Mar 10 22:48:21 EET 2014


legat de Buffered I/O vs. System-Level I/O:
 la intrebare
Care este numărul de apeluri de bibliotecă și numărul de apeluri de sistem 
realizate de programul buffered?
Raspunsul date pe site este:
Programul buffered realizează 10 apeluri de bibliotecă putchar și 20 apeluri 
de bibliotecă putc, conform celor două bucle for. Întrucât folosește 
buffered I/O, se face flush/sincronizare, adică se face apel de sistem doar 
dacă se ajunge la un caracter newline (\n) sau dacă se apelează fflush(). 
Deci se vor face doar două apeluri de sistem: unul la apelul printf(“\n”); 
și altul la apelul fflush(f);.

iar codul este:

for (i = 0; i < 10; i++) {
		printf("a");
		sleep(1);
	}
	printf("\n");

	f = fopen("f.txt", "w+");
	DIE(f == NULL, "fopen");

	for (i = 0; i < 10; i++) {
		fprintf(f, "a");
		fprintf(f, "\n");
		sleep(1);
	}
	fflush(f);

Intrebarea mea e:
printf("\n") nu face si el un apel de biblioteca, care va fi urmat de un 
apel de sistem care va goli buferul?
adica nu ar trebui sa fie 10 apeluri de biblioteca din for (0...9) + 1 apel 
biblioteca de la printf + 2*10 apeluri de biblioteca (cel de-al 2-lea for) +
1 apel de biblioteca de la fflush?

Pe scurt: printf/fprintf e functie din bibloteca, deci orice apel ar trebui 
sa se contorizeze ca unul de biblioteca (chiar daca el va deveni si de 
sistem) nu?

Offtopic: cum se poate seta dimensiunea bufferului? (am testat pe calculator 
si implicit vad ca e 1024). Este o regula generala?



More information about the so mailing list