Introdução aos arquivos de cabeçalho C++ - <cstdio>
arquivos de cabeçalho
<cstdio>
arquivo principal
Introdução
<cstdio>
É para <stdio.h>
expressar o conteúdo na forma de um arquivo de cabeçalho C++. <stdio.h>
É o arquivo de cabeçalho na biblioteca de funções padrão C, a saber: entrada e saída com buffer padrão. Fornece operações básicas de fluxo de entrada e saída de texto (incluindo telas e arquivos, etc.). Como a linguagem C não fornece palavras-chave dedicadas à entrada e saída de texto, esta biblioteca é a biblioteca de carregamento de programas em linguagem C mais comum.
Nota: Há uma diferença <cstdio>
entre <stdio.h>
, não o mesmo arquivo.
visão geral
namespace std {
using size_t = ;
using FILE = ;
using fpos_t = ;
}
#define NULL
#define _IOFBF
#define _IOLBF
#define _IONBF
#define BUFSIZ
#define EOF
#define FOPEN_MAX
#define FILENAME_MAX
#define L_tmpnam
#define SEEK_CUR
#define SEEK_END
#define SEEK_SET
#define TMP_MAX
#define stderr
#define stdin
#define stdout
namespace std {
int remove(const char* filename);
int rename(const char* old, const char* new);
FILE* tmpfile();
char* tmpnam(char* s);
int fclose(FILE* stream);
int fflush(FILE* stream);
FILE* fopen(const char* filename, const char* mode);
FILE* freopen(const char* filename, const char* mode, FILE* stream);
void setbuf(FILE* stream, char* buf);
int setvbuf(FILE* stream, char* buf, int mode, size_t size);
int fprintf(FILE* stream, const char* format, ...);
int fscanf(FILE* stream, const char* format, ...);
int printf(const char* format, ...);
int scanf(const char* format, ...);
int snprintf(char* s, size_t n, const char* format, ...);
int sprintf(char* s, const char* format, ...);
int sscanf(const char* s, const char* format, ...);
int vfprintf(FILE* stream, const char* format, va_list arg);
int vfscanf(FILE* stream, const char* format, va_list arg);
int vprintf(const char* format, va_list arg);
int vscanf(const char* format, va_list arg);
int vsnprintf(char* s, size_t n, const char* format, va_list arg);
int vsprintf(char* s, const char* format, va_list arg);
int vsscanf(const char* s, const char* format, va_list arg);
int fgetc(FILE* stream);
char* fgets(char* s, int n, FILE* stream);
int fputc(int c, FILE* stream);
int fputs(const char* s, FILE* stream);
int getc(FILE* stream);
int getchar();
int putc(int c, FILE* stream);
int putchar(int c);
int puts(const char* s);
int ungetc(int c, FILE* stream);
size_t fread(void* ptr, size_t size, size_t nmemb, FILE* stream);
size_t fwrite(const void* ptr, size_t size, size_t nmemb, FILE* stream);
int fgetpos(FILE* stream, fpos_t* pos);
int fseek(FILE* stream, long int offset, int whence);
int fsetpos(FILE* stream, const fpos_t* pos);
long int ftell(FILE* stream);
void rewind(FILE* stream);
void clearerr(FILE* stream);
int feof(FILE* stream);
int ferror(FILE* stream);
void perror(const char* s);
}
algum conhecimento
Biblioteca C++ para realizar operações de entrada/saída
As operações de entrada e saída também podem ser implementadas em C++ usando a biblioteca de entrada e saída padrão C ( <cstdio>
, em linguagem C <stdio.h>
). A biblioteca utiliza os chamados “streams” para manipular dispositivos físicos como teclados, impressoras, terminais ou outros tipos de arquivos suportados pelo sistema. Um stream é uma abstração para interagir com esses dispositivos físicos de maneira uniforme. Todos os fluxos têm propriedades semelhantes, independentemente das características individuais dos dispositivos físicos associados.
Os fluxos <cstdio>
operam na biblioteca como ponteiros para objetos FILE. Um ponteiro para um objeto FILE representa exclusivamente um fluxo e é usado como parâmetro em operações que projetam o fluxo.
Existem três fluxos padrão: stdin, stdout e stderr, que são criados automaticamente e publicamente para todos os programas que usam a biblioteca.
propriedades de fluxo
Os fluxos possuem propriedades que definem quais funções podem ser aplicadas a eles e como tratar a entrada ou saída de dados deles. fopen
A maioria dessas propriedades são definidas no momento em que o stream é associado (aberto) ao arquivo por meio da função:
acesso de leitura/gravação
Especifica se os fluxos têm acesso de leitura ou gravação (ou ambos) à mídia física associada.
texto/binário
Considera-se que um fluxo de texto representa uma sequência de linhas de texto, cada linha terminada por um caractere de nova linha. Dependendo do ambiente operacional do programa, pode ocorrer alguma conversão de caracteres para adaptar alguns caracteres especiais à particularidade do ambiente do arquivo de texto. Um fluxo binário, por outro lado, é uma sequência de caracteres escritos ou lidos de um meio físico sem qualquer conversão, que corresponde um a um aos caracteres lidos ou escritos no fluxo.
esconderijo
Um cache é um bloco de memória onde os dados são acumulados antes de serem lidos ou gravados em um arquivo ou dispositivo associado. Os fluxos podem ser totalmente armazenados em buffer, em buffer de linha ou não em buffer. Para fluxos com buffer completo, os dados são lidos/gravados quando o fluxo está cheio, para fluxos com buffer de linha, quando um caractere de nova linha é encontrado, e para fluxos sem buffer, os caracteres são lidos/gravados imediatamente.
orientação
Quando aberto, o fluxo não é direcionado. Quando operações de entrada/saída são executadas neles, elas se tornam orientadas a bytes ou orientadas a bytes largos, dependendo de qual operador é aplicado (geralmente as funções definidas em são orientadas a bytes, enquanto as funções definidas em função são orientadas a bytes largos).
indicador
Os fluxos são usados para indicadores internos específicos que indicam seu estado atual e que afetam o comportamento das operações de entrada e saída neles:
indicador de erro
Este indicador é definido quando ocorre um erro em uma operação relativa ao fluxo. O indicador pode ferror
ser detectado pela função e pode ser redefinido chamando clearerr
, freopen
ou .rewind
indicador de fim de arquivo
Uma vez definido, indica que a próxima operação de leitura ou gravação neste fluxo atingiu o fim do arquivo. Ele pode ser detectado pela função e pode ser redefinido feof
chamando clearerr
ou freopen
chamando qualquer uma das funções de relocação ( rewind
, fseek
e ).fsetpos
indicador de localização
É um ponteiro interno para cada fluxo que aponta para o próximo caractere para a próxima operação de E/S ler ou escrever. Seu valor pode ser obtido pela função ftell
ou fgetpos
e pode ser alterado usando a função de relocação rewind
e função.fseek
fsetpos
função
Arquivo de ação:
-
remove
excluir arquivo (função) -
rename
renomear arquivo (função) -
tmpfile
abra um arquivo temporário (função) -
tmpnam
gerar um nome de arquivo temporário (função)
Acesso ao arquivo:
-
fclose
fechar arquivo (função) -
fflush
fluxo de descarga (função) -
fopen
abrir arquivo (função) -
freopen
reabrir o stream com um arquivo ou modo (função) diferente -
setbuf
definir cache de fluxo (função) -
servbuf
alterar buffer de fluxo (função)
Entrada/saída formatada:
fprintf
gravar dados formatados em stream (função)
-
fscanf
Ler dados formatados de um stream (função) -
printf
imprimir dados formatados parastdout
(função) -
scanf
stdin
ler dados formatados de (função) -
snprintf
Gravar dados formatados em buffer de comprimento fixo (função) -
sprintf
gravar dados formatados em string (função) -
sscanf
Ler dados formatados de uma string (função) -
vfprintf
Grava dados formatados da lista variada no fluxo (função) -
vfscanf
Ler dados formatados do fluxo na lista de argumentos variáveis (função) -
vprintf
imprima os dados formatados na lista variada parastdout
(função) -
vscanf
Ler dados formatados na lista de argumentos variáveis (função) -
vsnprintf
Grave os dados formatados na lista de parâmetros variáveis no buffer de comprimento fixo (função) -
vsprintf
Escreva os dados formatados na lista variada em uma string (função) -
vsscanf
Ler dados formatados de uma string em uma lista variada (função)
Entrada/saída de string:
-
fgetc
Obtenha um personagem de um stream (função) -
fgets
Obtenha uma string de um stream (função) -
fputc
escrever caracteres em um fluxo (função) -
fputs
grava uma string em um stream (função) -
getc
Obtenha um personagem de um stream (função) -
getchar
stdin
obter caractere de (função) -
gets
stdin
obter string de (função) -
putc
escrever caracteres em um fluxo (função) -
putchar
escrever caracterestdout
(função) -
puts
escrever string emstdout
(função) -
ungetc
não obtém um caractere de um fluxo (função)
Entrada/saída direta:
-
fread
Ler pedaços de dados de um stream (função) -
fwrite
gravar um pedaço de dados em um fluxo (função)
Localização de arquivo:
-
fgetpos
obter a posição atual do fluxo (função) -
fseek
reposicionar indicador de posição do fluxo (função) -
fsetpos
definir indicador de posição do fluxo (função) -
ftell
Obtenha a posição atual do stream (função) -
rewind
Defina a posição do fluxo para iniciar (função)
Manipulação de erros:
-
clearerr
limpar indicador de erro (função) -
feof
verifique o indicador de fim de arquivo (função) -
ferror
verifique o indicador de erro (função) -
perror
imprimir mensagem de erro (função)
macro
-
BUFSIZE
tamanho do buffer (constante) -
EOF
fim do arquivo (constante) -
FILENAME_MAX
O comprimento máximo do nome do arquivo (constante) -
FOPEN_MAX
Limite potencial em fluxos continuamente abertos (constante) -
L_tmpnam
Comprimento mínimo de nomes de arquivos temporários (constante) -
NULLnull
ponteiro (macro) -
TMP_MAX
Número de arquivos temporários (constante) -
Também:
_IOFBF
,_IOLBF
,_IONBF
(usado emsetvbuf
) -
SEEK_CUR
eSEEK_END
(SEEK_SET
usado emfseek
).
tipo
-
FILE
objeto (tipo) contendo informações sobre o fluxo de controle -
fpos_t
objeto (tipo) contendo informações no local especificado no arquivo -
size_t
tipo inteiro sem sinal (tipo)
contente
// -*- C++ -*- forwarding
header.
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 2, or (at your option)
// any later version.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License along
// with this library; see the file COPYING. If not, write to the Free
// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
// USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
// templates or use macros or inline functions from this file, or you compile
// this file and link it with other files to produce an executable, this
// file does not by itself cause the resulting executable to be covered by
// the GNU General Public License. This exception does not however
// invalidate any other reasons why the executable file might be covered by
// the GNU General Public License.
//
// ISO C++ 14882: 27.8.2 C Library files
//
/** @file cstdio
* This is a Standard C++ Library file. You should @c #include this file
* in your programs, rather than any of the "*.h" implementation files.
*
* This is the C++ version of the Standard C Library header @cstdio.h,
* and its contents are (mostly) the same as that header, but are all
* contained in the namespace @cstd.
*/
#ifndef _GLIBCXX_CSTDIO
#define _GLIBCXX_CSTDIO 1
#pragma GCC system_header
#include <bits/c++config.h>
#include <cstddef>
#include <stdio.h>
// Get rid of those macros defined in <stdio.h> in lieu of real functions.
#undef clearerr
#undef fclose
#undef feof
#undef ferror
#undef fflush
#undef fgetc
#undef fgetpos
#undef fgets
#undef fopen
#undef fprintf
#undef fputc
#undef fputs
#undef fread
#undef freopen
#undef fscanf
#undef fseek
#undef fsetpos
#undef ftell
#undef fwrite
#undef getc
#undef getchar
#undef gets
#undef perror
#undef printf
#undef putc
#undef putchar
#undef puts
#undef remove
#undef rename
#undef rewind
#undef scanf
#undef setbuf
#undef setvbuf
#undef sprintf
#undef sscanf
#undef tmpfile
#undef tmpnam
#undef ungetc
#undef vfprintf
#undef vprintf
#undef vsprintf
namespace std
{
using ::FILE;
using ::fpos_t;
using ::clearerr;
using ::fclose;
using ::feof;
using ::ferror;
using ::fflush;
using ::fgetc;
using ::fgetpos;
using ::fgets;
using ::fopen;
using ::fprintf;
using ::fputc;
using ::fputs;
using ::fread;
using ::freopen;
using ::fscanf;
using ::fseek;
using ::fsetpos;
using ::ftell;
using ::fwrite;
using ::getc;
using ::getchar;
using ::gets;
using ::perror;
using ::printf;
using ::putc;
using ::putchar;
using ::puts;
using ::remove;
using ::rename;
using ::rewind;
using ::scanf;
using ::setbuf;
using ::setvbuf;
using ::sprintf;
using ::sscanf;
using ::tmpfile;
using ::tmpnam;
using ::ungetc;
using ::vfprintf;
using ::vprintf;
using ::vsprintf;
}
#if _GLIBCXX_USE_C99
#undef snprintf
#undef vfscanf
#undef vscanf
#undef vsnprintf
#undef vsscanf
namespace __gnu_cxx
{
#if _GLIBCXX_USE_C99_CHECK || _GLIBCXX_USE_C99_DYNAMIC
extern "C" int
(snprintf)(char *
restrict,
size_t,
const char * restrict, ...);
extern "C" int
(
vfscanf)(FILE * restrict, const char * restrict, __gnuc_va_list);
extern "C" int (
vscanf)(const char *
restrict, __gnuc_va_list);
extern "C" int
(vsnprintf)(char * restrict,
size_t,
const char * restrict, __gnuc_va_list);
extern "C" int
(
vsscanf)(const char * restrict, const char * restrict, __gnuc_va_list);
#endif
#if !_GLIBCXX_USE_C99_DYNAMIC
using ::snprintf;
using ::
vfscanf;
using ::
vscanf;
using ::vsnprintf;
using ::vsscanf;
#endif
}
namespace std
{
using __gnu_cxx::
snprintf;
using __gnu_cxx::vfscanf;
using __gnu_cxx::vscanf;
using __gnu_cxx::vsnprintf;
using __gnu_cxx::
vsscanf;
}
#endif