Categoria

Linguagem C

Packaging: criando .deb, .rpm e AppImage
Linguagem C

Packaging: criando .deb, .rpm e AppImage

Empacotar uma aplicação escrita em C é o passo final para transformar código-fonte em software distribuível. Usuários finais não compilam programas — eles instalam pacotes. Sem packaging, você entrega um tarball e deixa o usuário lidar com dependências, paths e permissões. Com pacotes .deb, .rpm ou AppImage, você oferece instalação limpa, remoção segura e gerenciamento automático de bibliotecas.

05/05/2026
Monitoring: métricas com Prometheus node exporter
Linguagem C 05/05/2026

Monitoring: métricas com Prometheus node exporter

O ecossistema Prometheus é uma solução open-source de monitoramento que coleta métricas de sistemas e aplicações, armazena-as em um banco de dados time-series e permite a criação de alertas baseados em regras. O Node Exporter é um agente oficial que expõe métricas do sistema operacional (CPU, memória, disco, rede) via HTTP no formato texto do Prometheus.

Multithreading avançado: thread pools e work stealing
Linguagem C 05/05/2026

Multithreading avançado: thread pools e work stealing

Thread pool é um padrão de concorrência onde um conjunto fixo de threads (workers) é pré-criado e reutilizado para executar tarefas submetidas dinamicamente. Em C, implementamos isso com pthreads, gerenciando o ciclo de vida das workers: criação inicial, execução contínua em laço e destruição controlada via shutdown.

Mutex e sincronização com pthreads
Linguagem C 05/05/2026

Mutex e sincronização com pthreads

Quando múltiplas threads acessam dados compartilhados simultaneamente, surge o problema da condição de corrida (race condition). O resultado da execução depende da ordem não determinística de acesso aos recursos. Considere duas threads incrementando uma variável global contador:

Network programming: select, poll, epoll e kqueue
Linguagem C 05/05/2026

Network programming: select, poll, epoll e kqueue

Em modelos tradicionais de servidores de rede, cada conexão de cliente frequentemente exigia uma thread ou processo dedicado. O modelo fork() por conexão é simples, mas sofre com alto custo de criação de processos e overhead de contexto. O modelo thread por conexão reduz o custo, mas ainda enfrenta limitações de escalabilidade quando o número de conexões simultâneas cresce para milhares.

O que é C e por que ainda importa em 2026
Linguagem C 05/05/2026

O que é C e por que ainda importa em 2026

C é uma das linguagens de programação mais influentes já criadas. Desenvolvida por Dennis Ritchie nos laboratórios Bell entre 1969 e 1972, sua criação foi diretamente motivada pela necessidade de reescrever o sistema operacional Unix de forma portável. Antes de C, sistemas operacionais eram escritos em assembly, amarrados a um hardware específico.

Memory leaks e como evitá-los com valgrind
Linguagem C 05/05/2026

Memory leaks e como evitá-los com valgrind

Memory leaks (vazamentos de memória) ocorrem quando um programa aloca memória dinamicamente durante sua execução, mas nunca a libera de volta ao sistema operacional. Em C, isso acontece tipicamente quando usamos funções como malloc, calloc ou realloc sem o correspondente free.

Memory pools e allocators customizados
Linguagem C 05/05/2026

Memory pools e allocators customizados

A alocação dinâmica de memória em C, tradicionalmente feita com malloc e free, apresenta problemas conhecidos em sistemas de alto desempenho: fragmentação de memória, latência imprevisível e overhead de gerenciamento. Em aplicações como jogos, sistemas embarcados e processamento de áudio/vídeo em tempo real, esses problemas podem ser críticos.

Mocking em C: técnicas e ferramentas
Linguagem C 05/05/2026

Mocking em C: técnicas e ferramentas

Testar código C no mundo real significa lidar com hardware, sistemas operacionais, bibliotecas de terceiros e décadas de código legado. Uma função que chama read_sensor() ou send_uart() não pode ser testada unitariamente sem o hardware presente. O mocking resolve esse problema substituindo dependências reais por versões controladas, permitindo verificar comportamento sem efeitos colaterais.

Leitura e escrita de arquivos binários
Linguagem C 05/05/2026

Leitura e escrita de arquivos binários

Arquivos texto armazenam dados como caracteres legíveis, usando codificações como ASCII ou UTF-8. Cada número ou valor é convertido em sua representação textual antes de ser gravado. Já arquivos binários armazenam dados exatamente como estão na memória do computador, sem qualquer conversão ou formatação. Enquanto um arquivo texto com o inteiro 12345 ocupa 5 bytes (um para cada caractere), um arquivo binário ocupa apenas 4 bytes (tamanho de um int).