AULA 22 - Programação 1 - Graduação - MediaWiki do Campus São José
AULA 22 - Programação 1 - Graduação
Revisão de 11h42min de 9 de junho de 2015 por Douglas (discussão | contribs) (→‎Exemplos)
2 O Sistema de Arquivos no Linux
2.1 O Arquivo
2.2 Sistema de Arquivos
2.3 Diretórios
2.4 Referência a um arquivo
2.5 No Linux/Unix tudo é arquivo
3 Acessando arquivos a partir de programas C
3.1 Acesso a arquivos: funções de baixo e alto nível
3.2 Acesso a arquivo em MODO TEXTO através de funções de alto nível
3.4 Ainda funções de acesso a arquivos
O sistema de arquivos no Linux;
Tratamento de arquivos no C;
O acesso com funções de alto nível.
Note que um arquivo pode conter dados como por exemplo: um programa C, um programa executável, textos, música, vídeos e fotos. Seja qual for a natureza dos dados o armazenamento será na forma de bits.
Normalmente, arquivos são armazenados em memórias secundárias, tais como CD e HD (Hard Disk). Também podem ser armazenados na memória principal RAM ou uma memória rápida FLASH.
Quanto a forma como os dados são armazenados, podemos dizer que os arquivos são binários ou texto. Qualquer um deles armazena bits em que em conjunto de 8, representam os bytes, que por sua vez estão associados a um código ASCII.
Existem vários formatos de sistema de arquivos, dependendo do sistema operacional. No linux os formatos mais conhecidos são: ext2, ext3, ext4 etc. No Windows os mais conhecidos são FAT32 e NTFS.
Um sistema de arquivos normalmente possui uma estrutura de dados inicial chamada de superbloco. O superbloco traz informações sobre o tamanho de blocos do sistema, o início da lista de inodes (/).
lista de i-nodes
blocos dos arquivos
Em sistemas do porte do Linux e Windows, por questões de segurança e controle, todo acesso a arquivo é realizado através de código do sistema operacional. Desta forma, um programa que deseja acessar um arquivo deve gerar uma CHAMADA AO SISTEMA. O Linux, assim como outros sistemas operacionais, possui uma API (Application Programming Interface) bem definida, na forma de um conjunto de chamadas que permitem realizar uma série de funcionalidades (serviços) para os processos (programas em execução).
A tabela abaixo apresenta as principais funções da linguagem C para manipulação de arquivos:
Abre um arquivo.
Fecha um arquivo.
putc() e fputc()
Escreve um caractere em um arquivo
getc() e fgetc()
Lê um caractere de um arquivo.
Posiciona em um registro de um arquivo
Efetua impressão formatada em um arquivo.
Efetua leitura formatada em um arquivo.
Verifica o final de um arquivo.
Escreve tipos maiores que 1 byte em um arquivo.
Lê tipos maiores que 1 byte de um arquivo.
Escrevendo e lendo um arquivo texto de forma formatada:
Note que se o arquivo IFSC.txt não existir, ele será criado. Para ver o que foi escrito faça:
Implementar uma função que some duas matrizes fornecidas em arquivos de texto separados: MatA.dat e MatB.dat. Colocando o resultado em um outro arquivo de texto com o nome MatC.dat.
Neste exemplo usaremos as funções fgetc e fputc para ler e escrever caracteres ASCII nos arquivos. Seja um programa que conta o número de ocorrências do caracter 'a' em um arquivo e reescreve o arquivo sem os "as":
Que fputc recebe o caracter como um inteiro mas realiza um cast para unsigned char com fins de escrevê-lo no arquivo.
Substitua 'a' por '\n' e veja o que acontece com o arquivo destino.
Execute o programa da forma (suponha que se chame LOG_tempo):
Substitua o modo de append por uma simples escrita (w). Reexecute o programa conforme especificado anteriormente.
Que o vetor, sendo uma variável global não inicialiazada, será zerado pelo procedimento de startup do programa. Entretanto, a posição 90 recebe um valor (11).
Não é possível visualizar o conteúdo do arquivo porque a função fwrite() grava o arquivo em formato binário.
fseek(fp, 90*sizeof(int), SEEK_SET);
Considere o programa abaixo. Ele deve acessar uma tabela que se encontra em um arquivo binário. Cada item da tabela se apresenta conforme o registro TRegistro. Implemente a função LerTab e crie um programa para escrever uma tabela iniciada com uma tabela de 5 registros a fim de testar a função implementada.
struct TRegistro *LerTab(int indice)
Disponível em "https://wiki.sj.ifsc.edu.br/index.php?title=AULA_22_-_Programação_1_-_Graduação&oldid=90151"