📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados em Especialização em Sistemas com C. Recomendado revisar antes de começar.
v1.0 — C11/C17, Ponteiros, Structs, Arquivos Binários e Gerenciamento de Memória
Trilha de Especialização Pedagógica — Projeto 1 de 4
- ➡️ v1 (este): Mini-SGBD Binário · Alocação Dinâmica (
malloc/free) · Ponteiros · Valgrind- v2: Gerenciador de Memória Customizado (Memory Pool Allocator)
- v3: Driver de Rede e Conexão Socket TCP em C
- v4: Microkernel Educacional com Troca de Contexto de Processos
🎓 Nível Profissional Simulado: Engenheiro de Software C / Sistemas de Baixo Nível. C é a linguagem em que o Linux, o Git e o PostgreSQL foram escritos. Dominar ponteiros, aritmética de endereços de memória e manipulação binária de arquivos é a credencial definitiva de um engenheiro de computação completo.
—`
Construir do zero um Mini-Motor de Banco de Dados Binário (SGBD) em C Puro (C11), implementando inserção de registros de tamanho fixo com fwrite, busca direta por índice e offset em disco com fseek/fread, gerenciamento manual de memória dinâmica e auditoria contra vazamentos com Valgrind.
—`
“Nosso dispositivo de telemetria industrial possui apenas 16MB de memória RAM e não pode rodar SQLite ou MySQL. Precisamos de um mini-banco de dados em C puro que armazene contas e medições em um arquivo binário compacto (
.db), realize buscas rápidas por ID através de leitura binária direta e não apresente um único byte de vazamento de memória (zero memory leaks no Valgrind).”
| ID | Tipo | Descrição | Origem no Briefing |
|---|---|---|---|
| RF01 | Funcional | Gravar estruturas RegistroConta em arquivo binário com fwrite. |
“armazene em arquivo binário” |
| RF02 | Funcional | Buscar registros por ID com leitura atômica de sizeof(RegistroConta). |
“buscas rápidas por ID” |
| RF03 | Funcional | Liberar toda a memória alocada dinamicamente via free(). |
“zero memory leaks” |
| RNF01 | Não-Funcional | 100% C ANSI / C11 compilável sem avisos com -Wall -Wextra -Werror. |
Rigor de Compilação |
| RNF02 | Não-Funcional | Zero vazamentos aferido pelo Valgrind (0 errors from 0 contexts). |
Confiabilidade de Memória |
—`
| ID | User Story | Prioridade |
|---|---|---|
| US01 | Como operador do dispositivo, quero persistir contas no arquivo .db com integridade binária. |
Alta |
| US02 | Como engenheiro, quero auditar o binário no Valgrind e certificar ausência de vazamentos. | Alta |
—`
# Branch da funcionalidade
git checkout -b feature/US01-c-binary-db
# Compilar com GCC com flags de rigor maximo
gcc -Wall -Wextra -pedantic -std=c11 src/db_engine.c -o db_engine
# Executar a auditoria de memoria com Valgrind
valgrind --leak-check=full --show-leak-kinds=all ./db_engine
—`
src/db_engine.c)typedef struct {
int id;
char nome[64];
double saldo;
} RegistroConta;
void salvar_registro(const char* filename, RegistroConta* conta) {
FILE* file = fopen(filename, "ab");
if (file) {
fwrite(conta, sizeof(RegistroConta), 1, file);
fclose(file);
}
}
—`
No seu editor/IDE, abra a pasta deste projeto (File > Open Folder) ou navegue via terminal:
cd sistemas_c_01_db_binario
gcc -Wall -O2 src/main.c -o app && ./app
[!TIP] Dica para execução a partir da raiz do repositório: Se você abriu o repositório completo no VS Code, basta navegar até a pasta antes de executar: cd proj_aplicacoes_full_stack/projetos/sistemas_c_01_db_binario`
—`
All heap blocks were freed -- no leaks are possible (0 errors from 0 contexts).—`
- Arquivo binário
.dbgravado e lido com precisão de bytes.- Zero ponteiros órfãos ou vazamentos de memória.
| ⬅️ Ver Todos os Projetos no Super-Hub | 🏠 Página Inicial do Portal |