Variáveis transientes e persistentes
• Programas executando lidam com variáveis
– forma abstrata pela qual os programadores enxergam os dados que seus
programas manipulam.
– internamente, variáveis ocupam células de memória.
• usualmente o tipo inteiro de C corresponde a 32 bits
•
uma variável int em C ocupa 4 bytes (4 células de memória).
• A memória principal de um computador (RAM) é o local onde os
programas em execução, e as variáveis que eles utilizam, são armazenados.
2
Variáveis transientes e persistentes
• Essas variáveis armazenadas na memória principal
– são chamadas de variáveis transientes
– seu tempo de existência é limitado pelo tempo que o programa se encontra em
memória.
• Quando o usuário ou o SO decidirem finalizá-lo, essas variáveis deixarão
de existir.
• Computadores teriam sua utilidade muito reduzida se os dados só
pudessem ser armazenados enquanto os programas estivessem na
memoria principal (e a maquina, ligada).
3
Variáveis transientes e persistentes
• Variáveis persistentes
– conteúdo armazenado, e possível de ser acessado, independentemente do
programa que as criou estar na memória principal.
– variáveis persistentes são armazenadas em algum dispositivo de memória
chamada de secundária:
• como discos rígidos, CD/DVD, memória flash
• mantém por um longo tempo os dados neles contidos
• independe do conteúdo da memória do computador, ou mesmo de ele estar ligado.
• ressalta-se que o tempo de armazenamento de, e acesso a dados usando
dispositivos de memória secundária é muito maior que usando a memória principal!
4
Variáveis transientes e persistentes
• O conceito por trás das variáveis persistentes é o de arquivo
– por meio de arquivos, as variáveis podem ser armazenadas e seus dados
acessados e processados a qualquer tempo, tanto pelo programa que as criou
quanto por outros programas.
5
Tipos de arquivos
• Texto
– arquivo texto é uma sequência de caracteres
– dados armazenados de tal forma que em C são armazenados em variáveis do
tipo char.
– um arquivo texto aberto num editor de texto convencional, poder ter seu
conteúdo ao menos visualizado e modificado também ... (com caracteres que
façam sentido, ou não! ...)
6
Tipos de arquivos
• Binário
– Espelho do conteúdo da memória
– Comando específico de leitura e escrita
– Exemplo
1
2
3
4
5
struct pessoa {
char nome[50];
int idade;
float salario;
}
50 bytes que armazenam cada uma das variáveis
char, mais 32 bits (4 bytes) que armazenam uma
variável int, e mais 32 bits (4 bytes) que
armazenam uma variável float.
7
Definição de arquivos no programa
• os arquivos são tratados como variáveis
• como todas as outras variáveis, devem ser declarados
• podem ser usados como argumentos para funções
• existem funções para realizar todas as operações sobre arquivos
na linguagem C o tipo FILE, definido na biblioteca
stdio.h, é usado para se trabalhar com arquivos.
1
2
FILE *arq;
Um ponteiro para FILE deve ser declarado sempre
que uma variável arquivo for utilizada no programa.
8
Operações sobre arquivos
1
2
3
/* Protótipo da função de abertura de arquivos */
FILE *fopen (char *nomearq, char *modo);
Parâmetros:
ponteiro para char –
nomearq (nome do
arquivo físico)
outro ponteiro para
char com o modo de
uso do arquivo e
tipo.
1
2
3
4
5
/* Exemplo */
FILE *arq1 , *arq2;
arq1 = fopen ("somente_escrita.txt", "w");
arq2 = fopen ("leio_e_escrevo.meu", "r");
9
Definição de arquivos no programa
• a função fopen()
– avaliação de seu valor de retorno.
– erros na abertura de um arquivo
• ex: passar para fopen() o código “r”, mas o arquivo não existe
– retorno de fopen() é NULL indicando a falha na abertura do arquivo
1
2
3
4
5
6
FILE *arq;
arq = fopen ("alunos.txt", "r");
if (arq == NULL) {
printf ("Erro na abertura de arquivo! Programa terminado...");
exit (1);
}
exit() é uma função da biblioteca stdlib.h da linguagem C, que retorna o controle ao SO,
passando um código de retorno, e terminando o programa.
10
Fechamento de arquivos
• retorna zero se a operação terminou sem falhas
• caso contrário, retorna um valor diferente de zero
• recebe como parâmetro um ponteiro para FILE
• quando fclose() é usada, os dados pendentes na “buffer” do arquivo são
escritos e o arquivo físico é dissociado de FILE*
1
2
3
/* Protótipo da função de fechamento de arquivos */
int fclose (FILE *arq);
11
Operações com arquivos texto
• Operações de leitura
– fscanf(), fgets()
• A primeira parece com uma velha conhecida: scanf()
• A segunda será apresentada, para quem ainda não conhece
1
2
3
4
5
/* Protótipos das funções de leitura de arquivos texto*/
int fscanf ( FILE *fp, const char *format, ... );
char *fgets (char *str, int length, FILE *fp);
12
Uso de fscanf(..)
fscanf() para de ler a linha quando encontra o fim da
linha. Neste caso, cada variável lida. Por este motivo
esta função não é indicada para leitura de strings
que possam ter um fim de linha em seu conteúdo.
13
Uso de fgets(..)
14
Operações com arquivos texto
• Operações de escrita
– fprintf()
• Parece com uma velha conhecida: printf()
1
2
3
4
/* Protótipo da função de escrita de arquivos texto*/
int fprintf ( FILE *fp, const char *format, ... );
15
Uso de fprintf(...)
16
Algumas funções úteis
• feof()
– verificação de fim de arquivo

A função que recebe como parâmetro o ponteiro associado a
um arquivo já aberto (via fopen), retorna zero se o arquivo
ainda não chegou ao fim;
1
2
3
/* Protótipos da função feof() */
int feof(FILE *fp);
17
Download

Introdução à Arquitetura Orientada para Serviços