[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