- 4/2/2020
- 2 minuten om te lezen
-
- T
- v
- n
- m
- c
-
+5
Spoelt een stroom door.
Syntax
int fflush( FILE *stream);
Parameters
stream
Pointer naar FILE structuur.
Return Waarde
fflush retourneert 0 als de buffer succesvol is gespoeld. De waarde 0 wordt ook teruggegeven in gevallen waarin de opgegeven stroom geen buffer heeft of alleen open is voor lezen. Een retourwaarde van EOF duidt op een fout.
Note
Als fflush EOF retourneert, zijn er mogelijk gegevens verloren gegaan door een schrijffout. Bij het instellen van een kritieke foutafhandeling is het het veiligst om buffering uit te schakelen met de setvbuf-functie of om low-level I/O-routines zoals _open, _close, en _write te gebruiken in plaats van de stream I/O-functies.
Opmerkingen
De fflush-functie spoelt de stream door. Als de stream in schrijfmodus is geopend, of in bijwerkingsmodus is geopend en de laatste bewerking een schrijfbewerking was, wordt de inhoud van de streambuffer naar het onderliggende bestand of apparaat geschreven en wordt de buffer weggegooid. Als de stream geopend is in leesmodus, of als de stream geen buffer heeft, heeft de aanroep van fflush geen effect, en blijft de buffer behouden. Een oproep tot fflush heft het effect op van een eerdere oproep tot ungetc voor de stream. De stream blijft open na de aanroep.
Als stream NULL is, is het gedrag hetzelfde als een aanroep van fflush op elke open stream. Alle streams die in schrijfmodus zijn geopend en alle streams die in update-modus zijn geopend en waarvan de laatste bewerking een schrijfbewerking was, worden doorgespoeld. De aanroep heeft geen effect op andere streams.
Buffers worden normaal onderhouden door het besturingssysteem, dat het optimale moment bepaalt om de gegevens automatisch naar schijf te schrijven: wanneer een buffer vol is, wanneer een stream wordt gesloten, of wanneer een programma normaal eindigt zonder de stream te sluiten. Met de commit-to-disk functie van de runtime library kunt u ervoor zorgen dat kritieke gegevens direct naar schijf worden geschreven in plaats van naar de buffers van het besturingssysteem. Zonder een bestaand programma te herschrijven, kunt u deze functie inschakelen door de objectbestanden van het programma te koppelen met COMMODE.OBJ. In het resulterende uitvoerbare bestand wordt met aanroepen tot _flushall de inhoud van alle buffers naar schijf geschreven. Alleen _flushall en fflush worden door COMMODE.OBJ beïnvloed.
Voor informatie over het aansturen van de commit-to-disk functie, zie Stream I/O, fopen, en _fdopen.
Deze functie blokkeert de aanroepende thread en is daarom thread-safe. Voor een niet-vergrendelende versie, zie _fflush_nolock.
De globale toestand van deze functie is standaard gescoped naar de applicatie. Om dit te wijzigen, zie Global state in de CRT.
Requirements
Function | Required header |
---|---|
fflush | <stdio.h> |
Voor aanvullende compatibiliteitsinformatie, zie Compatibiliteit.
Exemplaar
// 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;}