• 4/2/2020
  • 2 minutter at læse
    • T
    • v
    • n
    • m
    • c
    • +5

Skyller en strøm ud.

Syntaks

int fflush( FILE *stream);

Parametre

stream
Pointer til FILE-struktur.

Returneringsværdi

fflush returnerer 0, hvis bufferen er blevet skyllet med succes. Værdien 0 returneres også i de tilfælde, hvor den angivne stream ikke har nogen buffer eller kun er åben for læsning. En returværdi på EOF angiver en fejl.

Note

Hvis fflush returnerer EOF, kan data være gået tabt på grund af en skrivefejl. Når du opretter en kritisk fejlhåndtering, er det sikrest at slå buffering fra med funktionen setvbuf eller at bruge I/O-rutiner på lavt niveau såsom _open, _close og _write i stedet for stream I/O-funktionerne.

Bemærkninger

Funktionen fflush skyller streamstrømmen. Hvis strømmen blev åbnet i skrivetilstand, eller hvis den blev åbnet i opdateringstilstand, og den sidste operation var en skrivning, skrives indholdet af strømbufferen til den underliggende fil eller enhed, og bufferen kasseres. Hvis strømmen blev åbnet i læsetilstand, eller hvis strømmen ikke har nogen buffer, har kald til fflush ingen virkning, og en eventuel buffer bevares. Et kald til fflush ophæver virkningen af ethvert tidligere kald til ungetc for strømmen. Strømmen forbliver åben efter kaldet.

Hvis stream er NULL, er opførslen den samme som et kald til fflush på hver enkelt åben strøm. Alle streams, der er åbnet i skrivetilstand, og alle streams, der er åbnet i opdateringstilstand, hvor den sidste operation var en skrivning, bliver flushet. Kaldet har ingen virkning på andre streams.

Buffere vedligeholdes normalt af operativsystemet, som bestemmer det optimale tidspunkt for automatisk at skrive dataene til disken: når en buffer er fuld, når en stream lukkes, eller når et program afsluttes normalt uden at lukke streamet. Med funktionen commit-to-disk i run-time-biblioteket kan du sikre, at kritiske data skrives direkte til disken i stedet for til operativsystemets buffere. Uden at omskrive et eksisterende program kan du aktivere denne funktion ved at sammenkæde programmets objektfiler med COMMODE.OBJ. I den resulterende eksekverbare fil skriver kald til _flushall indholdet af alle buffere til disken. Kun _flushall og fflush påvirkes af COMMODE.OBJ.

For oplysninger om styring af commit-to-disk-funktionen, se Stream I/O, fopen og _fdopen.

Denne funktion låser den kaldende tråd og er derfor trådsikker. For en version uden låsning, se _fflush_nolock.

Som standard er denne funktions globale tilstand scoped til programmet. Hvis du vil ændre dette, skal du se Global tilstand i CRT.

Requirements

Function Required header
fflush <stdio.h>

For yderligere oplysninger om kompatibilitet, se Kompatibilitet.

Eksempel

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

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.