Documente Academic
Documente Profesional
Documente Cultură
de intrare/ieşire a informaţiei
Parametrul buf_nou poate lua ca valoare şi valoarea NULL. În acest caz, are
loc mărirea buferului de sistem cu valoarea indicată de parametrul dimensiune.
Exemplele ce urmează descriu diferite laturi ale funcţiei setvbuf():
a) mărirea buferului de sistem;
setvbuf(fc, NULL, _IOFBF, 100); //cu 100 de octeti
//mai mare
b) definirea unui bufer nou, având mărimea 5000 de octeţi şi tipul
_IOLBF;
char domeniu[5000];
. . .
setvbuf(fc, domeniu, _IOLBF, 5000);
c) definirea unui bufer nou, având mărimea 1000 de octeţi şi tipul
_IONBF, ceea ce înseamnă că de fapt buferul nu va fi utilizat în procesul
operaţiilor de citire şi scriere.
char bufer[1000];
. . .
setvbuf(fc, bufer, _IONBF, 1000); // flux
// nebuferizat
Citirea unui caracter este posibilă atât din fluxul predefinit stdin, cât şi din
fluxuri asociate cu fişiere şi dispozitive periferice. Astfel, pentru a citi un caracter
din fluxul stdin, pot fi utilizate două construcţii asemănătoare ca sens,
macroinstrucţiunea
int getchar();
şi funcţia
int fgetchar();
care returnează caracterul citit în caz de succes sau valoarea EOF în caz de eroare
sau sfârşit de fişier. Iată un exemplu de citire a unui caracter de la tastatură
char cifra;
cifra=fgetchar();
Fiecare dintre ele returnează caracterul scris în caz de succes sau EOF în caz de
eroare.
fc = fopen (”caract.txt”, ”a”);
fputc (c, fc);
Dacă sunt necesare operaţii de citire sau scriere efectuate asupra valorilor de tip
int, pot fi utilizate două funcţii proiectate pentru un astfel de context. Pentru
citirea unei valori de tip int, va fi folosită următoarea funcţie:
int getw(FILE *var_fl);
iar pentru scriere va fi aplicată funcţia:
int putw(int num, FILE *var_fl);
Una dintre cerinţe este că atunci, când sunt utilizate getw() şi putw(), fişierul
trebuie deschis în regim binar. Ambele funcţii returnează valori de tip int: în caz de
succes, valoarea citită din flux sau valoarea înscrisă în flux, iar la depistare de erori
sau şi sfârşit de fişier în cazul primei funcţii valoarea EOF.
Pentru citirea unui şir de caractere din fluxul standard stdin, este utilizată
funcţia cu următorul prototip:
char *gets(char *sir);
#define DIM 10
void Afisare(FILE *fc, int N)
{
char sir[DIM];
int lungimeLinie=0, ecran=0;
while (1)
{
fgets(sir, sizeof(sir), fc);
if(feof(fc))
break;
if(ecran==1)
printf("%s", sir);
lungimeLinie+=strlen(sir);
if(sir[strlen(sir)-1] != '\n')
continue;
if(ecran==0)
{
if(lungimeLinie>N+1)
lungimeLinie=N+1;
fseek(fc, -(lungimeLinie+1), SEEK_CUR);
}
ecran=(ecran+1)%2;
lungimeLinie=0;
}
}
//------------
void main(int argu, char *argc [])
{
FILE *fc;
int N=20;
fc = fopen(argc[1], "r");
if (fc != NULL)
{
Afisare(fc, N);
fclose (fc);
}
else
printf ("Eroare de deschidere (la citire).");
getch ();
}