📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados em Especialização em Sistemas com C. Recomendado revisar antes de começar.

💾 Mini-SGBD Binário com Alocação Dinâmica em C Puro

v1.0 — C11/C17, Ponteiros, Structs, Arquivos Binários e Gerenciamento de Memória

Trilha de Especialização Pedagógica — Projeto 1 de 4

🎓 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.

—`

🎯 Objetivo & Escopo do Projeto

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.

—`

🧑‍💼 Fase 1 — Levantamento de Requisitos

O Briefing do Cliente (Arquiteto de Sistemas Embarcados)

“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).”

Requisitos Funcionais (RF) e Não-Funcionais (RNF)

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

—`

📋 Fase 2 — Backlog & User Stories

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

—`

🌿 Fase 3 — Engenharia em Equipe (Git Flow & Compilação)

# 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

—`

🛠️ Fase 4 — Implementação Guiada (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);
    }
}

—`

🚀 Como Executar no Laboratório

1. Abra o terminal na pasta deste projeto

No seu editor/IDE, abra a pasta deste projeto (File > Open Folder) ou navegue via terminal:

cd sistemas_c_01_db_binario

2. Execute a aplicação ou testes

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`

🧭 Decisões de Arquitetura (ADRs)

—`

🧪 Testes de Validação & Relatório Valgrind

—`

✅ Checkpoint Final

  1. Arquivo binário .db gravado e lido com precisão de bytes.
  2. Zero ponteiros órfãos ou vazamentos de memória.

⬅️ Ver Todos os Projetos no Super-Hub 🏠 Página Inicial do Portal