-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgetset_dados.c
142 lines (122 loc) · 3.84 KB
/
getset_dados.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
//############################################################################
/* As funções definidas neste arquivo estão explicadas no arquivo "get&set_dados.h".
Nesse código você encontrá comentários a nível de variáveis e procedimentos.
##############################################################################*/
//Trabalho 1 da disciplina de Organização de Arquivos
#include "getset_dados.h"
//Definição da estrutura do cabeçalho do arquivo de dados
struct registro_cabecalho{
char status;
long int topo; long int prox_reg_disponivel;
int n_reg_disponiveis;
int n_reg_removidos;
};
//Definição da estrutura do registro de dados
struct registro_dados{
char removido;
int tamanho_registro;
long int prox_reg;
int id;
int idade;
int tam_Nome;
char* nome;
int tam_Nacionalidade;
char* nacionalidade;
int tam_Clube;
char* clube;
;
};
char get_status(CABECALHO* cabecalho){
//Pega o status do registro cabeçalho do arquivo de dados
if(cabecalho == NULL){
return '0';
}
return cabecalho->status;
}
int getID(DADOS* registro){
//Pega o ID do registro de dados
if(registro == NULL){
return -1;
}
return registro->id;
}
long int getTopo(CABECALHO* registro){
//Pega o topo do registro de cabeçalho do arquivo de dados
if(registro == NULL){
return -1;
}
return registro->topo;
}
int getnRemovidos(CABECALHO* registro){
//Pega o número de registros removidos do registro de cabeçalho do arquivo de dados
if(registro == NULL){
return -1;
}
return registro->n_reg_removidos;
}
int getnRegDisponiveis(CABECALHO* registro){
//Pega o número de registros disponíveis do registro de cabeçalho do arquivo de dados
if(registro == NULL){
return -1;
}
return registro->n_reg_disponiveis;
}
long int getProxRegDisponivel(CABECALHO* registro){
//Pega o byteoffset do próximo registro disponível do registro de cabeçalho do arquivo de dados
if(registro == NULL){
return -1;
}
return registro->prox_reg_disponivel;
}
void set_nRegDisponiveis(CABECALHO* registro, int n){
//Atualiza o número de registros disponíveis do registro de cabeçalho do arquivo de dados
if(registro == NULL){
return;
}
registro->n_reg_disponiveis = n;
}
void set_nRegRemovidos(CABECALHO* registro, int n){
//Atualiza o número de registros removidos do registro de cabeçalho do arquivo de dados
if(registro == NULL){
return;
}
registro->n_reg_removidos = n;
}
void set_topo(CABECALHO* registro, int n){
//Atualiza o topo do registro de cabeçalho do arquivo de dados
if(registro == NULL){
return;
}
registro->topo = n;
}
void setProxRegDisponivel(CABECALHO* registro, long int n){
//Atualiza o campo de próximo registro disponível do registro de cabeçalho no arquivo de dados
if(registro == NULL){
return;
}
registro->prox_reg_disponivel = n;
}
int get_tam(long int endereco, FILE* arquivo_dados){
//Vai para o endereço especficiado e lê o campo de removido
fseek(arquivo_dados, endereco, SEEK_SET);
char removido;
fread(&removido, sizeof(char), 1, arquivo_dados);
if(removido == '1'){
//Se o registro realmente foi removido, lê o campo de tamanho do registro e o retorna
int tam;
fread(&tam, sizeof(int), 1, arquivo_dados);
return tam;
}
else{
//Se o registro não foi removido, retorna -1 (flag de erro)
return -1;
}
}
long int get_prox(long int endereco, FILE* arquivo_dados){
//Vai para o endereço especificado e lê o campo de proximo registro (byteoffset)
fseek(arquivo_dados, endereco + 5, SEEK_SET);
long int prox;
fread(&prox, sizeof(long int), 1, arquivo_dados);
//Retorna o valor lido.
return prox;
}