- 4/2/2020
- 2 minuuttia aikaa lukea
-
- T
- v
- n
- m
- c
-
+5
Huuhtoo virran.
Syntaksi
int fflush( FILE *stream);
Parametrit
virta
Osoitin FILE-rakenteeseen.
Paluuarvo
fflush palauttaa 0, jos puskurin huuhtelu onnistui. Arvo 0 palautetaan myös tapauksissa, joissa määritetyllä streamilla ei ole puskuria tai se on avoinna vain lukemista varten. Paluuarvo EOF ilmaisee virhettä.
Huomautus
Jos fflush palauttaa arvon EOF, dataa on saattanut kadota kirjoitusvirheen vuoksi. Kriittistä virheenkäsittelyä määritettäessä on turvallisinta kytkeä puskurointi pois päältä setvbuf-funktiolla tai käyttää matalan tason I/O-rutiineja, kuten _open, _close ja _write, virran I/O-funktioiden sijasta.
Huomautuksia
Funktio fflush tyhjentää virran virran. Jos virta avattiin kirjoitustilassa tai se avattiin päivitystilassa ja viimeinen toiminto oli kirjoitus, virran puskurin sisältö kirjoitetaan taustalla olevaan tiedostoon tai laitteeseen ja puskuri hävitetään. Jos virta avattiin lukutilassa tai jos virrassa ei ole puskuria, fflush-kutsulla ei ole vaikutusta, ja mahdollinen puskuri säilytetään. Kutsu fflush:iin mitätöi virtausta koskevan aiemman ungetc-kutsun vaikutuksen. Virta pysyy auki kutsun jälkeen.
Jos stream on NULL, käyttäytyminen on sama kuin kutsu fflushiin jokaisessa avoimessa streamissa. Kaikki kirjoitustilassa avatut virrat ja kaikki päivitystilassa avatut virrat, joissa viimeinen operaatio oli kirjoitus, tyhjennetään. Kutsulla ei ole vaikutusta muihin streameihin.
Puskureita ylläpitää normaalisti käyttöjärjestelmä, joka määrittää optimaalisen ajankohdan, jolloin tiedot kirjoitetaan automaattisesti levylle: kun puskuri on täynnä, kun stream suljetaan tai kun ohjelma päättyy normaalisti sulkematta streamia. Ajonaikaisen kirjaston commit-to-disk-ominaisuuden avulla voit varmistaa, että kriittiset tiedot kirjoitetaan suoraan levylle eikä käyttöjärjestelmän puskureihin. Voit ottaa tämän ominaisuuden käyttöön kirjoittamatta olemassa olevaa ohjelmaa uudelleen linkittämällä ohjelman objektitiedostot COMMODE.OBJ:llä. Tuloksena syntyvässä suoritettavassa tiedostossa _flushall-kutsut kirjoittavat kaikkien puskurien sisällön levylle. COMMODE.OBJ vaikuttaa vain _flushall- ja fflush-ominaisuuksiin.
Tietoa levylle tallentamisen ominaisuuden hallitsemisesta on kohdassa Stream I/O, fopen ja _fdopen.
Tämä funktio lukitsee kutsuvan säikeen ja on siksi säikeeturvallinen. Lukitsemattoman version löydät kohdasta _fflush_nolock.
Oletusarvoisesti tämän funktion globaali tila on sovelluksen laajuinen. Jos haluat muuttaa tätä, katso kohta Globaali tila CRT:ssä.
Tarpeet
Funktio | Tarpeet-otsikko |
---|---|
fflush | <stdio.h> |
Lisätietoa yhteensopivuudesta on kohdassa Yhteensopivuus.
Esimerkki
// 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;}
.