• 4/2/2020
  • 2 minutos para ler
    • T
    • v
    • n
    • m
    • c
    • +5

Flushes a stream.

Sintaxe

int fflush( FILE *stream);

Parâmetros

stream
Ponto para a estrutura do FILE.

Valor de retorno

Retrocesso de descarga 0 se o buffer foi enxaguado com sucesso. O valor 0 também é retornado nos casos em que o fluxo especificado não tem buffer ou está aberto apenas para leitura. Um valor de retorno de EOF indica um erro.

Nota

Se fflush retornar EOF, os dados podem ter sido perdidos devido a uma falha de escrita. Ao configurar um manipulador de erros críticos, é mais seguro desligar o buffer com a função setvbuf ou usar rotinas de E/S de baixo nível como _open, _close, e _write em vez das funções de E/S do fluxo.

Remarks

A função fflush limpa o fluxo do fluxo. Se o stream foi aberto em modo de escrita, ou foi aberto em modo de actualização e a última operação foi uma escrita, o conteúdo do buffer do stream é escrito no ficheiro ou dispositivo subjacente e o buffer é descartado. Se o fluxo foi aberto em modo de leitura, ou se o fluxo não tem buffer, a chamada para fflush não tem efeito, e qualquer buffer é mantido. Uma chamada para fflush nega o efeito de qualquer chamada anterior ao ungetc para o fluxo. O stream permanece aberto após a chamada.

Se o stream for NULL, o comportamento é o mesmo que uma chamada para fflush em cada stream aberto. Todos os fluxos abertos em modo de escrita e todos os fluxos abertos em modo de atualização, onde a última operação foi uma escrita, são enxaguados. A chamada não tem efeito sobre outros fluxos.

Buffers são normalmente mantidos pelo sistema operacional, o que determina o tempo ótimo para gravar os dados automaticamente no disco: quando um buffer está cheio, quando um fluxo é fechado, ou quando um programa termina normalmente sem fechar o fluxo. A funcionalidade commit-to-disk da biblioteca de tempo de execução permite assegurar que os dados críticos são gravados directamente no disco em vez de serem gravados nos buffers do sistema operativo. Sem reescrever um programa existente, você pode habilitar esta funcionalidade ligando os arquivos objeto do programa ao COMMODE.OBJ. No arquivo executável resultante, chamadas para _flushall gravam o conteúdo de todos os buffers em disco. Apenas _flushall e fflush são afetados pelo COMMODE.OBJ.

Para informações sobre o controle da funcionalidade commit-to-disk, veja Stream I/O, fopen, e _fdopen.

Esta função bloqueia o thread de chamada e é, portanto, thread-safe. Para uma versão sem bloqueio, veja _fflush_nolock.

Por padrão, o estado global desta função é escopado para a aplicação. Para alterar isso, veja Estado global no CRT.

Requisitos

Função Cabeçalho requerido
fflush <stdio.h>

Para informações adicionais sobre compatibilidade, veja Compatibility.

Exemplo

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

Deixe uma resposta

O seu endereço de email não será publicado.