Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Linguagem C

C - E/S de arquivo


O último capítulo explicou os dispositivos de entrada e saída padrão manipulados pela linguagem de programação C. Este capítulo aborda como os programadores C podem criar, abrir, fechar arquivos de texto ou binários para seu armazenamento de dados.

Um arquivo representa uma sequência de bytes, independente de ser um arquivo de texto ou um arquivo binário. A linguagem de programação C fornece acesso a funções de alto nível, bem como chamadas de baixo nível (nível do SO) para manipular arquivos em seus dispositivos de armazenamento. Este capítulo o guiará pelas chamadas importantes para o gerenciamento de arquivos.

Abrindo arquivos


Você pode usar o fopen( ) função para criar um novo arquivo ou para abrir um arquivo existente. Esta chamada irá inicializar um objeto do tipo FILE , que contém todas as informações necessárias para controlar o fluxo. O protótipo desta chamada de função é o seguinte -
FILE *fopen( const char * filename, const char * mode );

Aqui, nome do arquivo é um literal de string, que você usará para nomear seu arquivo e acessar o modo pode ter um dos seguintes valores -
Nº Sr. Modo e descrição
1
r

Abre um arquivo de texto existente para fins de leitura.
2
s

Abre um arquivo de texto para escrita. Se não existir, um novo arquivo será criado. Aqui seu programa começará a escrever conteúdo desde o início do arquivo.
3
um

Abre um arquivo de texto para escrita no modo de acréscimo. Se não existir, um novo arquivo será criado. Aqui seu programa começará a anexar conteúdo no conteúdo do arquivo existente.
4
r+

Abre um arquivo de texto para leitura e escrita.
5
w+

Abre um arquivo de texto para leitura e escrita. Primeiro, ele trunca o arquivo para comprimento zero, se existir, caso contrário, cria um arquivo se não existir.
6
a+

Abre um arquivo de texto para leitura e escrita. Ele cria o arquivo se ele não existir. A leitura começará desde o início, mas a escrita só pode ser acrescentada.

Se você for manipular arquivos binários, usará os seguintes modos de acesso em vez dos mencionados acima -
"rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b"

Fechando um arquivo


Para fechar um arquivo, use a função fclose(). O protótipo desta função é −
int fclose( FILE *fp );

O fclose(-) função retorna zero em caso de sucesso, ou EOF se houver um erro ao fechar o arquivo. Essa função realmente libera todos os dados ainda pendentes no buffer para o arquivo, fecha o arquivo e libera qualquer memória usada para o arquivo. O EOF é uma constante definida no arquivo de cabeçalho stdio.h .

Existem várias funções fornecidas pela biblioteca padrão C para ler e gravar um arquivo, caractere por caractere, ou na forma de uma string de comprimento fixo.

Escrevendo um arquivo


A seguir está a função mais simples para escrever caracteres individuais em um fluxo -
int fputc( int c, FILE *fp );

A função fputc() grava o valor do caractere do argumento c no fluxo de saída referenciado por fp. Ele retorna o caractere escrito escrito em caso de sucesso, caso contrário EOF se houver um erro. Você pode usar as seguintes funções para escrever uma string terminada em nulo em um fluxo -
int fputs( const char *s, FILE *fp );

A função fputs() escreve a string s para o fluxo de saída referenciado por fp. Retorna um valor não negativo em caso de sucesso, caso contrário EOF é retornado em caso de erro. Você pode usar int fprintf(FILE *fp,const char *format, ...) também para escrever uma string em um arquivo. Tente o exemplo a seguir.

Certifique-se de ter /tmp diretório disponível. Se não for, antes de continuar, você deve criar este diretório em sua máquina.
#include <stdio.h>

main() {
   FILE *fp;

   fp = fopen("/tmp/test.txt", "w+");
   fprintf(fp, "This is testing for fprintf...\n");
   fputs("This is testing for fputs...\n", fp);
   fclose(fp);
}

Quando o código acima é compilado e executado, ele cria um novo arquivo test.txt no diretório /tmp e grava duas linhas usando duas funções diferentes. Vamos ler este arquivo na próxima seção.

Ler um arquivo


Dada a seguir é a função mais simples para ler um único caractere de um arquivo -
int fgetc( FILE * fp );

O fgetc() A função lê um caractere do arquivo de entrada referenciado por fp. O valor de retorno é o caractere lido, ou em caso de erro, retorna EOF . A função a seguir permite ler uma string de um stream -
char *fgets( char *buf, int n, FILE *fp );

As funções fgets() lê até n-1 caracteres do fluxo de entrada referenciado por fp. Ele copia a string lida no buffer buf , anexando um nulo caractere para encerrar a string.

Se esta função encontrar um caractere de nova linha '\n' ou o final do arquivo EOF antes de ler o número máximo de caracteres, ela retornará apenas os caracteres lidos até aquele ponto, incluindo o caractere de nova linha. Você também pode usar int fscanf(FILE *fp, const char *format, ...) função para ler strings de um arquivo, mas para de ler depois de encontrar o primeiro caractere de espaço.
#include <stdio.h>

main() {

   FILE *fp;
   char buff[255];

   fp = fopen("/tmp/test.txt", "r");
   fscanf(fp, "%s", buff);
   printf("1 : %s\n", buff );

   fgets(buff, 255, (FILE*)fp);
   printf("2: %s\n", buff );
   
   fgets(buff, 255, (FILE*)fp);
   printf("3: %s\n", buff );
   fclose(fp);

}

Quando o código acima é compilado e executado, ele lê o arquivo criado na seção anterior e produz o seguinte resultado -
1 : This
2: is testing for fprintf...

3: This is testing for fputs...

Vamos ver um pouco mais detalhadamente sobre o que aconteceu aqui. Primeiro, fscanf() leia apenas Isto porque depois disso, encontrou um espaço, a segunda chamada é para fgets() que lê a linha restante até encontrar o fim da linha. Finalmente, a última chamada fgets() lê a segunda linha completamente.

Funções de E/S Binárias


Existem duas funções que podem ser usadas para entrada e saída binária -
size_t fread(void *ptr, size_t size_of_elements, size_t number_of_elements, FILE *a_file);
              
size_t fwrite(const void *ptr, size_t size_of_elements, size_t number_of_elements, FILE *a_file);

Ambas as funções devem ser usadas para ler ou escrever blocos de memórias - geralmente arrays ou estruturas.

Linguagem C

  1. C Entrada Saída (E/S)
  2. C Manipulação de Arquivos
  3. E/S de arquivo Python
  4. Axiomtek:sistema rico em recursos para aplicativos de visão de máquina
  5. acceed:Módulos de E / S para comunicação de dados escalonáveis ​​
  6. C - Funções
  7. C - Arquivos de cabeçalho
  8. O que são os cartões I / O e como funcionam
  9. MATLAB - Saída de Dados
  10. C# - E/S de arquivo