Amostra enfeitada da interface da biblioteca stdio

Esta biblioteca contém várias funções de entrada e saída.  Quase todos os programas C usam essa biblioteca.

// Arquivo stdio.h.
// Interface da biblioteca stdio.
///////////////////////////////////////////////////////////

#ifndef _STDIO_H
#define _STDIO_H

#define NULL 0
#define EOF  (-1)

///////////////////////////////////////////////////////////
// Seção 1 -- Entrada e saída de bytes (chars)
///////////////////////////////////////////////////////////
                                                            
// A função fgetc lê o próximo byte (se tal existir) do 
// arquivo arq. O byte é interpretado como um unsigned
// char, convertido em int, e em seguida devolvido pela
// função. Se arq terminou (e portanto não tem um próximo
// byte) a função devolve EOF. Uso típico:
// i = fgetc (stdin).

int fgetc (FILE *arq);

                                                            
// Esta função tem o mesmo comportamento que fgetc mas é
// implementada como uma macro. Uso típico:
// i = getc (stdin).

int getc (FILE *arq); 

#define getchar ()  getc (stdin)


 
// Esta função converte c em um byte e escreve o byte no
// arquivo arq. Devolve o byte escrito (convertido em int)
// ou EOF no caso de algum erro. Uso típico: 
// fputc (c, stdout).

int fputc (int c, FILE *arq);


// Mesmo comportamento que fputc, mas é implementada como 
// uma macro. Uso típico: putc (c, stdout).

int putc (int c, FILE *arq);

#define putchar (x) putc ((x), stdout)



///////////////////////////////////////////////////////////
// Seção 2 -- Entrada e saída de strings
///////////////////////////////////////////////////////////


// Lê uma linha de texto do arquivo arq. Mais exatamente,
// lê no máximo n-1 bytes do arquivo arq e armazena-os no
// vetor s. (Se algum dos bytes lidos for \0, os resultados
// são imprevisíveis!) A leitura é interrompida se o
// arquivo terminar ou um byte \n for encontrado; nesse
// último caso, o byte \n é armazenado no vetor s. A menos
// que ocorra algum erro, a função armazena um byte \0 em s
// depois do último byte lido de arq. A função devolve s a
// menos que o arquivo tenha terminado ou algum erro tenha
// ocorrido, caso em que devolve NULL. Uso típico:
// fgets (s, n, stdin);

char *fgets (char *s, int n, FILE *arq);


// Recebe uma string str (com byte final \0) e grava essa
// string no arquivo arq. O byte \0 não é gravado. Devolve
// EOF se ocorrer algum erro e devolve um inteiro positivo
// em caso contrário. Uso típico: fputs (s, stdout);

int fputs (char *str, FILE *arq);



///////////////////////////////////////////////////////////
// Seção 3 -- Entrada e saída com formato
///////////////////////////////////////////////////////////

int printf (char *, ...);
int fprintf (FILE *, char *, ...);
int sprintf (char *, char *, ...);

int scanf (char *, ...);
int fscanf (FILE *, char *, ...);
int sscanf (char *, char *, ...);


///////////////////////////////////////////////////////////
// Seção 4 -- Arquivos (files) 
///////////////////////////////////////////////////////////

typedef struct {
   int            _cnt;  // available characters in buffer
   unsigned char *_ptr;  // next char from/to in buffer
   unsigned char *_base; // the buffer
   unsigned char  _flag; // the state of the stream
   unsigned char  _file; // UNIX System file descriptor
   . . .
} FILE;


// Uso típico: arq = fopen ("dir/meuarquivo.txt", "r").

FILE *fopen (char *path, char *mode);


// Uso típico: fclose (arq).

int fclose (FILE *arq);

#endif