E/S de fluxo

Essas funções processam os dados em diferentes tamanhos e formatos, desde caracteres únicos até grandes estruturas de dados. Elas também fornecem o armazenamento em buffer, o que pode melhorar o desempenho. O tamanho padrão de um buffer de fluxo é de 4 K. Essas rotinas afetam apenas os buffers criados por rotinas de biblioteca de tempo de execução e não têm efeito nos buffers criados pelo sistema operacional.

Rotinas de E/S de fluxo

Rotina Use
clearerr, clearerr_s Limpar o indicador de erro do fluxo
fclose Fechar o fluxo
_fcloseall Feche todos os fluxos abertos, exceto stdin, stdout e stderr
_fdopen, wfdopen Associar o fluxo ao descritor de arquivo do arquivo aberto
feof Testar o final do arquivo no fluxo
ferror Testar o erro no fluxo
fflush Liberar o fluxo no buffer ou dispositivo de armazenamento
fgetc, fgetwc Ler caracteres do fluxo (versões de função de getc e getwc)
_fgetchar, _fgetwchar Ler caracteres de stdin (versões de função de getchar e getwchar)
fgetpos Obter o indicador de posição do fluxo
fgets, fgetws Ler a cadeia de caracteres do fluxo
_fileno Obter o descritor de arquivo associado ao fluxo
_flushall Liberar todos os fluxos no buffer ou dispositivo de armazenamento
fopen, _wfopen, fopen_s, _wfopen_s Abrir fluxo
fprintf, _fprintf_l, fwprintf, _fwprintf_l, fprintf_s, _fprintf_s_l, fwprintf_s, _fwprintf_s_l Gravar os dados formatados no fluxo
fputc, fputwc Gravar um caractere em um fluxo (versões de função de putc e putwc)
_fputchar, _fputwchar Gravar um caractere em stdout (versões de função de putchar e putwchar)
fputs, fputws Gravar a cadeia de caracteres no fluxo
fread Ler dados não formatados no fluxo
freopen, _wfreopen, freopen_s, _wfreopen_s Reatribuir o ponteiro de fluxo FILE para o novo arquivo ou dispositivo
fscanf, fwscanf, fscanf_s, _fscanf_s_l, fwscanf_s, _fwscanf_s_l Ler dados formatados no fluxo
fseek, _fseeki64 Mover posição do arquivo para um determinado local
fsetpos Definir o indicador de posição do fluxo
_fsopen, _wfsopen Abrir um fluxo com compartilhamento de arquivos
ftell, _ftelli64 Obter a posição atual do arquivo
fwrite Gravar itens de dados não formatados no fluxo
getc, getwc Ler caracteres do fluxo (versões macro de fgetc e fgetwc)
getchar, getwchar Ler caracteres de stdin (versões macro de fgetchare fgetwchar)
_getmaxstdio Retorna o número permitido de arquivos abertos simultaneamente no nível de E/S do fluxo.
gets_s, _getws_s Ler linha de stdin
_getw Ler binário int no fluxo
printf, _printf_l, wprintf, _wprintf_l,printf_s, _printf_s_l, wprintf_s, _wprintf_s_l Gravar dados formatados em stdout
putc, putwc Gravar caracteres em um fluxo (versões macro de fputc e fputwc)
putchar, putwchar Gravar caracteres em stdout (versões macro de fputchar e fputwchar)
puts, _putws Gravar linha no fluxo
_putw Gravar binário int em fluxo
rewind Mover a posição do arquivo para o começo do fluxo
_rmtmp Remover arquivos temporários criados por tmpfile
scanf, _scanf_l, wscanf, _wscanf_l,scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l Ler dados formatados de stdin
setbuf Controlar o buffer de fluxo
_setmaxstdio Definir o máximo de arquivos abertos simultaneamente no nível de E/S de fluxo.
setvbuf Controlar o tamanho do buffer e o buffer de fluxo
_snprintf, _snwprintf, _snprintf_s, _snprintf_s_l, _snwprintf_s, _snwprintf_s_l Gravar dados formatados de comprimento especificado na cadeia de caracteres
_snscanf, _snwscanf, _snscanf_s, _snscanf_s_l, _snwscanf_s, _snwscanf_s_l Leia os dados formatados de um comprimento especificado do fluxo de entrada padrão.
sprintf, swprintf, sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l Gravar dados formatados na cadeia de caracteres
sscanf, swscanf, sscanf_s, _sscanf_s_l, swscanf_s, _swscanf_s_l Ler dados formatados na cadeia de caracteres
_tempnam, _wtempnam Gerar o nome de arquivo temporário no diretório fornecido
tmpfile, tmpfile_s Criar arquivo temporário
tmpnam, _wtmpnam, tmpnam_s, _wtmpnam_s Gerar nome de arquivo temporário
ungetc, ungetwc Enviar caractere por push para o fluxo
_vcprintf, _vcwprintf, _vcprintf_s, _vcprintf_s_l, _vcwprintf_s, _vcwprintf_s_l Gravar os dados formatados no console.
vfprintf, vfwprintf, vfprintf_s, _vfprintf_s_l, vfwprintf_s, _vfwprintf_s_l Gravar os dados formatados no fluxo
vprintf, vwprintf, vprintf_s, _vprintf_s_l, vwprintf_s, _vwprintf_s_l Gravar dados formatados em stdout
_vsnprintf, _vsnwprintf, vsnprintf_s, _vsnprintf_s, _vsnprintf_s_l, _vsnwprintf_s, _vsnwprintf_s_l Gravar dados formatados de comprimento especificado no buffer
vsprintf, vswprintf, vsprintf_s, _vsprintf_s_l, vswprintf_s, _vswprintf_s_l Gravar dados formatados no buffer

Quando um programa começa a execução, o código de inicialização abre automaticamente vários fluxos: entrada padrão (apontada por stdin), saída padrão (apontada por stdout) e o erro padrão (apontado por stderr). Esses fluxos são direcionados ao console (tela e teclado) por padrão. Use freopen para redirecionar stdin, stdout ou stderr para um arquivo de disco ou um dispositivo.

Por padrão, os arquivos abertos usando as rotinas de fluxo serão armazenados em buffer. As funções e as stdoutstderr funções são liberadas sempre que estão cheias ou, se você estiver escrevendo em um dispositivo de caractere, após cada chamada de biblioteca. Se um programa for encerrado de forma anormal, talvez os buffers de saída não esvaziem, resultando na perda de dados. Use fflush ou _flushall para garantir que o buffer associado a um arquivo especificado seja liberado para o sistema operacional ou que todos os buffers abertos sejam liberados. O sistema operacional pode armazenar dados em cache antes de escrevê-los em disco. O recurso commit-to-disk garante que o conteúdo do buffer liberado não seja perdido se houver uma falha no sistema.

Há duas maneiras de confirmar o conteúdo do buffer no disco:

  • Vincular com o arquivo COMMODE.OBJ para definir um sinalizador de confirmação global. A configuração padrão do sinalizador global é n, para "sem confirmação".

  • Defina o sinalizador de modo como c com fopen ou _fdopen.

Qualquer arquivo aberto especificamente com o sinalizador c ou n se comportará de acordo com o sinalizador, independentemente do estado do sinalizador de confirmação/sem confirmação global.

Se o programa não fechar explicitamente um fluxo, o fluxo será fechado automaticamente quando o programa for encerrado. No entanto, é necessário fechar um fluxo quando seu programa deixar de usá-lo, pois o número de fluxos que podem ser abertos ao mesmo tempo é limitado. Confira _setmaxstdio para mais informações sobre esse limite.

A entrada pode seguir a saída diretamente apenas com uma chamada intermediária para fflush ou para uma função de posicionamento de arquivos (fseek, fsetpos ou rewind). A entrada pode ser seguida por saída sem uma chamada intervindo para uma função de posicionamento de arquivo, se a operação de entrada encontrar o final do arquivo.

Confira também

Entrada e saída
Rotinas de runtime C universais por categoria