Categoria

Linguagem C

Threads com pthreads
Linguagem C

Threads com pthreads

Threads são unidades de execução leves que compartilham o mesmo espaço de endereçamento dentro de um processo. Diferentemente de processos pesados, que possuem contexto independente e exigem troca de contexto custosa, threads permitem concorrência real com menor overhead de criação e comunicação.

05/05/2026
Signal handling seguro: sigaction e signalfd
Linguagem C 05/05/2026

Signal handling seguro: sigaction e signalfd

Sinais são interrupções assíncronas enviadas a um processo para notificar eventos específicos. Eles podem ser gerados pelo kernel (como SIGSEGV para falha de segmentação), pelo usuário (Ctrl+C envia SIGINT), ou por outros processos via kill(). Quando um sinal é recebido, o fluxo normal do programa é pausado e um manipulador (handler) é executado.

Signals e tratamento de sinais do sistema operacional
Linguagem C 05/05/2026

Signals e tratamento de sinais do sistema operacional

Sinais são interrupções assíncronas enviadas pelo sistema operacional a um processo para notificar sobre eventos específicos. Quando um sinal é recebido, o processo pode executar uma ação padrão ou um manipulador personalizado definido pelo programador.

SIMD com intrinsics: acelerando processamento vetorial
Linguagem C 05/05/2026

SIMD com intrinsics: acelerando processamento vetorial

SIMD (Single Instruction, Multiple Data) é um paradigma de computação paralela onde uma única instrução opera simultaneamente sobre múltiplos dados. Em vez de processar um elemento por vez, o processador executa a mesma operação em um vetor inteiro de dados em um único ciclo de clock. Isso é especialmente útil em aplicações que envolvem grandes volumes de dados homogêneos, como processamento de imagem, áudio, simulações físicas e algoritmos de machine learning.

Sockets: comunicação em rede com C
Linguagem C 05/05/2026

Sockets: comunicação em rede com C

Sockets são abstrações de software que permitem a comunicação entre processos, seja em uma mesma máquina ou através de uma rede. Em C, a API de sockets (definida em <sys/socket.h>) é a base para construir aplicações de rede no modelo cliente-servidor. Nesse modelo, um processo servidor aguarda passivamente por conexões, enquanto clientes iniciam a comunicação ativamente.

Strings em C: arrays de char e o terminador nulo
Linguagem C 05/05/2026

Strings em C: arrays de char e o terminador nulo

Em C, não existe um tipo de dado nativo chamado "string". O que chamamos de string é, na verdade, um array de caracteres (char) que termina obrigatoriamente com um caractere especial: o terminador nulo ('\0'). Esse caractere tem valor numérico zero e serve como marcador de fim da string.

Security hardening: PIE, RELRO, stack canaries
Linguagem C 05/05/2026

Security hardening: PIE, RELRO, stack canaries

A linguagem C oferece controle direto sobre memória, o que a torna poderosa, mas também vulnerável a ataques clássicos como buffer overflow, retorno a libc (ret2libc) e programação orientada a retorno (ROP). Sem proteções adequadas, um invasor pode sobrescrever endereços de retorno, desviar fluxo de execução e executar código arbitrário.

Segmentation fault: causas e debugging
Linguagem C 05/05/2026

Segmentation fault: causas e debugging

Segmentation fault (ou segfault) é um erro fatal que ocorre quando um programa tenta acessar uma região de memória que não lhe pertence ou para a qual não tem permissão de acesso. O sistema operacional, através do gerenciador de memória virtual, detecta essa violação e envia o sinal SIGSEGV (signal 11) ao processo.

Segurança em C: buffer overflow e como prevenir
Linguagem C 05/05/2026

Segurança em C: buffer overflow e como prevenir

Buffer overflow é uma das vulnerabilidades mais antigas e perigosas em sistemas computacionais. Ocorre quando um programa tenta armazenar mais dados em um buffer (área de memória temporária) do que ele foi projetado para conter, resultando na sobrescrita de áreas adjacentes de memória.

Real-time systems: previsibilidade e deadlines
Linguagem C 05/05/2026

Real-time systems: previsibilidade e deadlines

Sistemas de tempo real são aqueles onde a correção da computação depende não apenas do resultado lógico, mas também do instante em que esse resultado é produzido. Em linguagem C, essa característica exige controle fino sobre o hardware e o escalonamento de tarefas.