• 4/2/2020
  • 2 minute de citit
    • T
    • . v
    • n
    • m
    • c
    • +5

Curăță un flux.

Sintaxa

int fflush( FILE *stream);

Parametri

stream
Pointer la structura FILE.

Valoare de retur

fflush returnează 0 dacă bufferul a fost curățat cu succes. Valoarea 0 este returnată și în cazurile în care fluxul specificat nu are un buffer sau este deschis doar pentru citire. O valoare de returnare EOF indică o eroare.

Nota

Dacă fflush returnează EOF, este posibil ca datele să se fi pierdut din cauza unei erori de scriere. Atunci când se configurează un gestionar de erori critice, cel mai sigur este să dezactivați tamponarea cu funcția setvbuf sau să folosiți rutine I/O de nivel inferior, cum ar fi _open, _close și _write, în locul funcțiilor I/O de flux.

Observații

Funcția fflush curăță fluxul de flux. Dacă fluxul a fost deschis în modul de scriere sau a fost deschis în modul de actualizare, iar ultima operațiune a fost o scriere, conținutul bufferului fluxului este scris în fișierul sau dispozitivul subiacent, iar bufferul este eliminat. În cazul în care fluxul a fost deschis în modul de citire sau dacă fluxul nu are un buffer, apelul la fflush nu are niciun efect, iar orice buffer este păstrat. Un apel la fflush anulează efectul oricărui apel anterior la ungetc pentru fluxul respectiv. Fluxul rămâne deschis după apel.

Dacă fluxul este NULL, comportamentul este același cu cel al unui apel la fflush pe fiecare flux deschis. Toate fluxurile deschise în modul de scriere și toate fluxurile deschise în modul de actualizare în care ultima operațiune a fost o scriere sunt eliminate. Apelul nu are niciun efect asupra altor fluxuri.

Buferele sunt în mod normal întreținute de sistemul de operare, care determină momentul optim pentru a scrie automat datele pe disc: când o memorie tampon este plină, când un flux este închis sau când un program se termină în mod normal fără a închide fluxul. Caracteristica „commit-to-disk” a bibliotecii de execuție vă permite să vă asigurați că datele critice sunt scrise direct pe disc, mai degrabă decât în tampoanele sistemului de operare. Fără a rescrie un program existent, puteți activa această caracteristică prin legarea fișierelor obiect ale programului cu COMMODE.OBJ. În fișierul executabil rezultat, apelurile la _flushall scriu conținutul tuturor tampoanelor pe disc. Numai _flushall și fflush sunt afectate de COMMODE.OBJ.

Pentru informații despre controlul caracteristicii commit-to-disk, consultați Stream I/O, fopen și _fdopen.

Această funcție blochează firul de apelare și, prin urmare, este thread-safe. Pentru o versiune fără blocare, consultați _fflush_nolock.

În mod implicit, starea globală a acestei funcții este atribuită aplicației. Pentru a schimba acest lucru, consultați Starea globală în CRT.

Requirements

Funcția În antetul Required
fflush <stdio.h>

Pentru informații suplimentare despre compatibilitate, vezi Compatibilitate.

Exemplu

// crt_fflush.c// Compile with: cl /W4 crt_fflush.c// This sample gets a number from the user, then writes it to a file.// It ensures the write isn't lost on crash by calling fflush.#include <stdio.h>int * crash_the_program = 0;int main(void){ FILE * my_file; errno_t err = fopen_s(&my_file, "myfile.txt", "w"); if (my_file && !err) { printf("Write a number: "); int my_number = 0; scanf_s("%d", &my_number); fprintf(my_file, "User selected %d\n", my_number); // Write data to a file immediately instead of buffering. fflush(my_file); if (my_number == 5) { // Without using fflush, no data was written to the file // prior to the crash, so the data is lost. *crash_the_program = 5; } // Normally, fflush is not needed as closing the file will write the buffer. // Note that files are automatically closed and flushed during normal termination. fclose(my_file); } return 0;}

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.