C ++ setbuf () - Libreria standard C ++

La funzione setbuf () in C ++ imposta il buffer interno da utilizzare per le operazioni di I / O da parte di un flusso.

prototipo setbuf ()

 void setbuf (FILE * stream, char * buffer);

Se il buffer non è nullo, equivale a chiamare setvbuf (stream, buffer, _IOFBF, BUFSIZ).

Se il buffer è null, equivale a chiamare setvbuf (stream, NULL, _IONBF, 0). In questo caso il buffering è disattivato.

È definito nel file di intestazione.

parametri setbuf ()

  • stream: flusso di file.
  • buffer: un puntatore a un buffer che può essere nullo o meno. Se è nullo, il buffering è disattivato, altrimenti dovrebbe avere almeno BUFSIZ byte.

setbuf () Restituisce il valore

Nessuna

I 2 esempi seguenti illustrano l'uso della funzione setbuf (). Entrambi questi programmi utilizzano operazioni sui file. Nel primo esempio, il buffer viene impostato utilizzando setbuf () per memorizzare internamente il contenuto del file.

Nell'esempio successivo, l'istruzione setbuf(fp, NULL)disattiva il buffering. Quindi, per leggere il contenuto del file, viene utilizzato fread ().

Esempio 1: come funziona la funzione setbuf ()

 #include #include using namespace std; int main () ( char str() = "Buffered Stream"; char buffer(BUFSIZ); FILE *fp; fp=fopen ("test.txt","wb"); setbuf(fp,buffer); fwrite(str, sizeof(str), 1, fp); fflush(fp); fclose(fp); cout << buffer; return 0; )

Quando esegui il programma, l'output sarà:

 Stream bufferizzato

Esempio 2: funzione setbuf () con buffering disattivato

 #include #include using namespace std; int main () ( char str() = "Unbuffered Stream"; char strFromFile(20); FILE *fp; fp=fopen ("test.txt","wb+"); setbuf(fp,NULL); fwrite(str, sizeof(str), 1, fp); fflush(fp); /* We need to rewind the file pointer and read the file because the data from test.txt isn't saved in any buffer */ rewind(fp); fread(strFromFile, sizeof(strFromFile), 1, fp); fclose(fp); cout << strFromFile; return 0; )

Quando esegui il programma, l'output sarà:

 Stream senza buffer

Articoli interessanti...