• 4/2/2020
  • 2 minuter att läsa
    • T
    • v
    • n
    • m
    • c
    • +5

Spolar ur en ström.

Syntax

int fflush( FILE *stream);

Parametrar

stream
Pointer till FILE-struktur.

Returneringsvärde

fflush returnerar 0 om bufferten rensades framgångsrikt. Värdet 0 returneras även i de fall då den angivna strömmen inte har någon buffert eller endast är öppen för läsning. Ett returvärde EOF indikerar ett fel.

Note

Om fflush returnerar EOF kan data ha gått förlorade på grund av ett skrivfel. När du ställer in en kritisk felhanterare är det säkrast att stänga av buffringen med funktionen setvbuf eller att använda I/O-rutiner på låg nivå som _open, _close och _write i stället för stream I/O-funktionerna.

Anmärkningar

Funktionen fflush rensar streamströmmen. Om strömmen öppnades i skrivläge, eller om den öppnades i uppdateringsläge och den senaste operationen var en skrivning, skrivs innehållet i strömbufferten till den underliggande filen eller enheten och bufferten kasseras. Om strömmen öppnades i läsläge, eller om strömmen inte har någon buffert, har anropet till fflush ingen effekt och eventuell buffert behålls. Ett anrop till fflush upphäver effekten av eventuella tidigare anrop till ungetc för strömmen. Strömmen förblir öppen efter anropet.

Om stream är NULL är beteendet detsamma som ett anrop till fflush på varje öppen ström. Alla strömmar som öppnats i skrivläge och alla strömmar som öppnats i uppdateringsläge där den senaste operationen var en skrivning rensas. Anropet har ingen effekt på andra strömmar.

Buffertar underhålls normalt av operativsystemet, som bestämmer den optimala tidpunkten för att skriva data automatiskt till disk: när en buffert är full, när en ström stängs eller när ett program avslutas normalt utan att strömmen stängs. Med funktionen commit-to-disk i körtidsbiblioteket kan du se till att kritiska data skrivs direkt till disken i stället för till operativsystemets buffertar. Utan att skriva om ett befintligt program kan du aktivera den här funktionen genom att länka programmets objektfiler med COMMODE.OBJ. I den resulterande körbara filen skriver anrop till _flushall innehållet i alla buffertar till disken. Endast _flushall och fflush påverkas av COMMODE.OBJ.

För information om hur du kontrollerar funktionen commit-to-disk, se Stream I/O, fopen och _fdopen.

Denna funktion låser den anropande tråden och är därför trådsäker. För en version utan låsning, se _fflush_nolock.

Som standard är den här funktionens globala tillstånd avgränsat till programmet. För att ändra detta, se Globalt tillstånd i CRT.

Krav

Function Required header
fflush <stdio.h>

För ytterligare information om kompatibilitet, se Compatibility.

Example

// 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;}

Lämna ett svar

Din e-postadress kommer inte publiceras.