Arquivos de texto

Arquivos de texto em C são diretos e fáceis de entender. Todas as funções e tipos de arquivo de texto em C vêm da biblioteca stdio.

Quando você precisa de I/O de texto em um programa em C e precisa apenas de uma fonte para informação de entrada e uma fonte para informação de saída, você pode usar o stdin (entrada padrão/teclado) e stdout (saída padrão/monitor). Você pode usar o redirecionamento de entrada e saída na linha de comando para mover diferentes fluxos de informações pelo programa. Há 6 comandos diferentes de I/O em <stdio.h> que você pode usar com stdin e stdout:

  • printf - imprime a saída formatada para stdout;
  • scanf - lê a entrada formatada do stdin;
  • puts - imprime uma string de caracteres para stdout;
  • gets: lê uma seqüência de caracteres do stdin;
  • putc - imprime um caractere para stdout;
  • gets, getchar - lê um caractere do stdin.
A vantagem do stdin e stdout é que eles são fáceis de usar. Da mesma forma, a capacidade para redirecionar a I/O é muito poderosa. Por exemplo, talvez você queira criar um programa que leia de stdin e conta o número de caracteres:
  #include <stdio.h>
  #include <string.h> 

  void main()
  {
      char s[1000];
      int count=0;
      while (gets(s))
          count += strlen(s);
      printf("%d\n",count);
  }  

Digite este código e execute-o. Ele aguardará pela entrada de stdin, portanto digite algumas linhas. Quando terminar, pressione CTRL-D para indicar o final do arquivo (eof, de "end-of-file"). A função gets lê uma linha até detectar o eof, depois retorna um 0, encerrando o loop while. Ao pressionar CTRL-D, você vê uma contagem do número de caracteres em stdout (a tela). Use man gets ou a documentação de seu compilador para saber mais sobre a função gets.

Agora, suponha que você queira contar os caracteres em um arquivo. Se o programa for compilado em um executável nomeado xxx, você pode digitar o seguinte:

  xxx < nome do arquivo 

Em vez de aceitar a entrada do teclado, será usado o conteúdo do arquivo denominado filename. Você pode obter o mesmo resultado usando o caractere barra vertical:

  cat < filename | xxx  

Você também pode redirecionar o resultado para um arquivo:

  xxx < filename > out  

Este comando coloca a contagem de caracteres produzida pelo programa em um arquivo de texto denominado out.

Às vezes, você precisa usar um arquivo de texto diretamente. Por exemplo, você pode precisar abrir um arquivo específico e ler ou escrever nele. Talvez você queira gerenciar vários fluxos de entrada ou saída, ou criar um programa como um editor de textos que possa salvar e recuperar arquivos de dados ou configurações no comando. Nesse caso, use as funções de arquivo de texto em stdio:

  • fopen - abre um arquivo de texto;
  • fclose - fecha um arquivo de texto;
  • feof - detecta o marcador de final de arquivo em um arquivo;
  • fprintf - imprime a saída formatada em um arquivo;
  • fscanf - lê a entrada formatada de um arquivo;
  • fputs - imprime uma string de caracteres para um arquivo;
  • fgets - lê uma string de caracteres de um arquivo;
  • fputc - imprime um caractere para um arquivo;
  • fgetc - lê um caractere de um arquivo.