ffflush



Общ преглед

Име на функцията: fflush

Функция: Изчистване на буфера за четене и запис, когато данните в изходния буфер трябва да бъдат физически записани незабавно

Заглавен файл: stdio.h

Прототип: intfflush(FILE*stream)

където поток е потокът, който трябва да бъде изчистен

описание на функцията h2>

Ако указателят сочи към изходен поток или поток за актуализиране, чиято последна операция не е вход, изходното опресняване ще създаде всички незаписани данни в потока, които ще бъдат записани към файла и потока, където са били променени най-новите данни. , И последната промяна на състоянието на файла трябва да бъде маркирана като клеймо за време на актуализирания основен файл.

За поток, който е отворен за четене с помощта на основното описание на файла, ако файлът все още не е в EOF и файлът е файл с възможност за търсене, файловото отместване на основното описание на отворен файл трябва да бъде зададено на потока Файлът местоположение и всички знаци, върнати обратно към потока от ungetc() или ungetwc(), които не са били прочетени от потока, ще бъдат отхвърлени (без допълнителни промени в отместването на файла). [Край на опцията]

Ако потокът е нулев указател, fflush() ще извърши тази операция за изчистване на всички потоци с поведението, дефинирано по-горе.

Пример на програма

#include#include#include#includevoid flush(FILE *stream);int main(void){ FILE *stream; char msg[]="Този тест"; /*createafile*/ stream=fopen("DUMMY.FIL","w");/*записва някои данни във файла*/ fwrite(charmsg,strlen(charmsg),1,stream); clrscr(); printf("PressanykeytoflushDUMMY.FlushDUMMY.FIL) "); getch();/*промиване на данните в DUMMY.FILбез затваряне*/ промиване(поток); printf("\nФайлът е изчистен, Натиснете произволен клавиш\за излизане:"); voidstream(); 0 ФАЙЛ* lush() return{getch(); 0 int duphandle; /*flushthestream'sinternalbuffer*/ fflush(stream);/*makeaduplicatefilehandle*/ duphandle=dup(fileno(stream));/*closetheduplicatehandletoflushthebuffer)*/ phandle(duphandle) 

Ако опресняването е успешно, fflush връща 0. Ако посоченият поток няма буфер или е отворен само за четене, също се връща стойност 0. Връщането на EOF показва грешка.

Забележка: Ако fflush върне EOF, данните може да са загубени поради грешка при запис. Когато настройвате важен манипулатор на грешки, най-безопасно е да затворите буфера с функцията setvbuf или да използвате I/0 рутинни процедури на ниско ниво, като отваряне, затваряне и запис, вместо I/O функции за поток.

Друго използване

fflush(stdin) опреснява стандартния входен буфер и отхвърля съдържанието на входния буфер [нестандартен]

< p>fflush(stdout) изчиства стандартния изходен буфер и отпечатва съдържанието на изходния буфер на стандартното изходно устройство

Бележки

Никога не се дефинира в стандартите C и C++ Pass fflush(stdin ). Някой може да каже: "Но аз използвах flush(stdin), за да реша този проблем, как можете да кажете, че е грешно?" Наистина, някои компилатори (като VC6) поддържат използването на fflush(stdin) за изчистване на входния буфер, но не всички компилатори трябва да поддържат тази функция (gcc под linux не я поддържа, тествано от моя GCC 4.6.2), защото стандартът изобщо не дефинира fflush (stdin).

Документът на MSDN също ясно посочва:

fflushoninputstream е разширение към C стандарта (fflush операция входен поток е разширение на C стандарта).

Следва дефиницията на функцията fflush в C99:

intfflush(ФАЙЛ*поток);

Ако потокът сочи към изходен поток или поток за актуализиране (updatestream) и най-новата операция, извършена от този поток за актуализиране, не е въведена, така че функцията fflush ще запише всички незаписани данни във файла, към който сочи потокът (като напр. стандартния изходен файл stdout). В противен случай поведението на функцията fflush е недефинирано. fflush (NULL) изчиства всички изходни потоци и потоците за актуализиране, споменати по-горе. Ако възникне грешка при запис, функцията за промиване ще маркира тези потоци като грешка и ще върне EOF, в противен случай връща 0.

Може да се види, че ако потокът сочи към входен поток (като stdin), тогава поведението на функцията fflush е недефинирано. Следователно е неправилно да се използва fflush(stdin).

This article is from the network, does not represent the position of this station. Please indicate the origin of reprint
TOP