powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / В каких случаях может возникнуть необходимость в использовании fflush?
8 сообщений из 8, страница 1 из 1
В каких случаях может возникнуть необходимость в использовании fflush?
    #38501823
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток.

Функция
Код: plaintext
1.
2.
#include <stdio.h>
int fclose(FILE* stream)

автоматически дозаписывает в поток информацию из буфера, в случае её наличия. Т.о. нет необходимости перед закрытием потока вызывать для него функцию
Код: plaintext
1.
2.
#include <stdio.h>
int fflush(FILE* stream)

В связи с этим возник вопрос: в каких случаях нужно использовать функцию fflush? Исходя из того, что указанная функция определена в стандарте C89, я полагаю, что она для каких-то ситуаций всё же нужна. Поиском по www.stackoverflow.com нашёл это . В обозначенном тексте приводится цитата:
C standardint fflush(FILE *ostream);

ostream points to an output stream or an update stream in which the most recent operation was not input, the fflush function causes any unwritten data for that stream to be delivered to the host environment to be written to the file; otherwise, the behavior is undefined.

Насколько я её понял, то в том случае, если на момент вызова fflush буфер не содержит данных, то поведение функции не определено... Ниже автор ответа пишет о том, что функцию fflush вообще не следует использовать. Если так, то почему данная функция присутствует в стандарте?

Спасибо.
...
Рейтинг: 0 / 0
В каких случаях может возникнуть необходимость в использовании fflush?
    #38501907
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Compositum,

Т.о. нет необходимости перед закрытием потока вызывать для него функцию


да, перед закрытием нет такой необходимости.

но не перед закрытием она может появиться. все потоки, в том числе сетевые, буферизируются. Соответственно, дослать кусок данных в буфере нужно делать flush.
...
Рейтинг: 0 / 0
В каких случаях может возникнуть необходимость в использовании fflush?
    #38501911
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насчёт сей не скажу. А в других языках если вместо FileStream используется memory-stream
то для получения его согласованного byte[]-представления нужно дёрнуть flush
а потом только получить массив байтов. Close() в явном виде нельзя вызывать т.к. это очистит
byte-буфер.

Flush также полезно дёргать после вывода важного события записи в лог-файл. В противном
случае читающий этот файл может не сразу увидеть это событие.
...
Рейтинг: 0 / 0
В каких случаях может возникнуть необходимость в использовании fflush?
    #38501936
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как быть с "неопределённым поведением" (обозначенным мною выше)? Например, вы вызываете fflush, а буфер в это время пустой... Чем чревато такое поведение в данном случае, в чём оно может выражаться?
...
Рейтинг: 0 / 0
В каких случаях может возникнуть необходимость в использовании fflush?
    #38502010
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CompositumА как быть с "неопределённым поведением" (обозначенным мною выше)? Например, вы вызываете fflush, а буфер в это время пустой... Чем чревато такое поведение в данном случае, в чём оно может выражаться?

Ничем, если буфер пуст, то ничего и не произойдёт.
...
Рейтинг: 0 / 0
В каких случаях может возникнуть необходимость в использовании fflush?
    #38502013
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.cplusplus.com/reference/cstdio/fflush/ function
<cstdio>
fflush

int fflush ( FILE * stream );

Flush stream
If the given stream was open for writing (or if it was open for updating and the last i/o operation was an output operation) any unwritten data in its output buffer is written to the file.

If stream is a null pointer, all such streams are flushed.

In all other cases, the behavior depends on the specific library implementation. In some implementations, flushing a stream open for reading causes its input buffer to be cleared (but this is not portable expected behavior).

The stream remains open after this call.

When a file is closed, either because of a call to fclose or because the program terminates, all the buffers associated with it are automatically flushed.
...
Рейтинг: 0 / 0
В каких случаях может возникнуть необходимость в использовании fflush?
    #38502024
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Compositum
В связи с этим возник вопрос: в каких случаях нужно использовать функцию fflush? Исходя из того, что указанная функция определена в стандарте C89, я полагаю, что она для каких-то ситуаций всё же нужна. Поиском по www.stackoverflow.com нашёл это.


В том топике говорится о применении fflush к ВХОДНОМУ файлу.
Выше я дал ссылку на описание функции, где однозначно говорится, что это непереносимо. Т.е. так делать нельзя.
Возможно, в топике со stack профессор просто знал точно, на какой реализации будут работать его студенты и
рекомендовал им делать так очистку ввода. Иначе её в общем непонятно как делать и на сколько я знаю переносимого
способа нет. Это я к тому, что профессор мог быть и не так уж неправ.
...
Рейтинг: 0 / 0
В каких случаях может возникнуть необходимость в использовании fflush?
    #38502036
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо!
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / В каких случаях может возникнуть необходимость в использовании fflush?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]