Assembly One
Do zero ao RISC-V
C One
Do zero ao básico em sistemas embarcados e IoT
C do zero, dentro de um sistema que já está em produção: o programa que vigia a temperatura do leite em duzentos e doze tanques de fazenda e manda o alarme quando alguma coisa esquenta. Tipos, memória, ponteiros, strings, structs, arquivos, bits, Makefile, depuração, sockets e threads, aprendidos porque o sistema exige — e um segmentation fault que só aparece às 3h17.
R$ 15,99
R$ 24,00
Promoção
Atenção: o idioma desta edição é português.
Edição Brasil
Menos teoria vazia.
Mais código que funciona.
Nada de exemplo solto com foo e bar.
Todo trecho pertence ao mesmo projeto, que cresce capítulo a capítulo —
e os erros aparecem como aparecem na sua tela, para serem lidos linha por linha.
#include <stdio.h>int main(void){ printf("Tanque 047: 3.8 graus\n"); printf("Tanque 048: 3.4 graus\n"); return 0;}
gcc -Wall -Wextra tanque.c -o tanque && ./tanqueTanque 047: 3.8 grausmakegcc -Wall -Wextra -c gateway.c
Um sistema só, do primeiro arquivo ao deploy
README.md
A Cooperativa Vale Leiteiro tem um gateway que ninguém quer abrir: onze mil linhas de C, um comentário NÃO MEXER e um caminhão que já voltou para a fazenda. Ao longo do livro, esse gateway vira código que você entende: memória, ponteiros, Makefile, sockets e o crash das 3h17.
C do zero, dentro de um sistema que já vigia duzentos e doze tanques.
- Um projeto só: o gateway dos tanques de leite da Cooperativa Vale Leiteiro
- Todo programa compilado com gcc -Wall -Wextra, com a saída conferida
- Memória e ponteiros desenhados, endereço por endereço
- Bugs de verdade: o tanque a 85 graus e o crash das 3h17
Leia uma prévia gratuita de C One
Esta amostra contém os primeiros capítulos. O PDF completo continua protegido para compradores.
30 capítulos em 12 partes
Abra uma parte para ver os capítulos — e a frase que abre cada um.
parte 01 O código que ninguém quer tocarUm gateway numa sala de ordenha, onze mil linhas de C, um comentário que diz NÃO MEXER, e um caminhão de leite que voltou para a fazenda. 2 cap.
-
01
Você tem certeza que isso é C?Um pen drive com etiqueta de 2019, um make que não passa da linha catorze, e um log que termina às 3h17.
-
02
Um PDP-11 em Murray HillUm projeto cancelado, um computador encostado num canto, e uma linguagem feita para escrever um sistema operacional — que acabou dentro de um tanque de leite.
parte 02 Entrando no mundo CO programa começa no main, e a temperatura do tanque mora em algum lugar da memória com tamanho, tipo e limite. 2 cap.
-
03
O programa começa no mainTrês linhas que não fazem nada, um computador que reinicia o programa sozinho, e a pergunta que ninguém tinha feito: reinicia por quê?
-
04
Variáveis não são caixas mágicasUm SMS às 4h06 dizendo que o leite está a 85 graus, um tanque que continua gelado, e um número que o sensor manda quando acorda.
parte 03 Fazendo o programa trabalharDecidir quando o leite esquentou, repetir para cada leitura, e quebrar a função de quatrocentas linhas do Seu Valdir. 3 cap.
-
05
Quando o programa precisa decidirTrês níveis de alarme, leite morno que é normal às cinco da manhã, e um sinal de igual que silenciava tudo.
-
06
Repetir é fácil. Saber quando parar é outra coisa.Duzentos e doze tanques, um relatório noturno que conta duzentos e treze, e um tanque que não existe mas tem temperatura.
-
07
A função que cresceu demaisQuatrocentas e doze linhas, dezenove níveis de chave, e uma função que devolve uma resposta quando o gateway precisa de duas.
parte 04 A memóriaOnde a variável está, o símbolo que parece pequeno demais, e o bug que some quando alguém coloca um printf. 3 cap.
-
08
Onde o dado realmente está?Um número de dezesseis dígitos com letras no meio, uma variável que mora num endereço, e o mapa que o Kauã desenhou na parede.
-
09
O símbolo que parece pequeno demaisUm asterisco que multiplica, declara e busca, uma função que finalmente devolve duas coisas, e o que o sistema faz com quem mexe no endereço zero.
-
10
O bug que desaparece quando você coloca um printfUm nível de alarme 1360, um printf que conserta tudo sem consertar nada, e a frase do padrão de C que explica as duas coisas.
parte 05 Arrays, strings e structsVinte e quatro leituras por dia, nomes de fazenda que não cabem, e o tanque que finalmente vira um tipo. 3 cap.
-
11
Vinte e quatro leiturasA auditoria quer a temperatura de cada hora, o C guarda tudo em fila, e o tanque 213 finalmente mostra de onde tirava a temperatura dele.
-
12
Strings não são stringsO nome da fazenda no SMS, um zero que ninguém escreve e todo mundo precisa, e oitenta e sete strcpy no arquivo do Seu Valdir.
-
13
O tanque vira um tipoSeis arrays que andavam juntos até alguém ordenar um deles, o relatório que culpava a fazenda errada, e um tanque que finalmente cabe numa variável.
parte 06 Um projeto de verdadeSeparar o arquivo de onze mil linhas, entender o que acontece antes do compilador, e parar de compilar trinta e sete arquivos na mão. 3 cap.
-
14
O arquivo de onze mil linhasTrês pessoas editando o mesmo arquivo, um conflito de merge de seiscentas linhas, e a diferença entre prometer uma função e escrevê-la.
-
15
Antes de compilar, outra coisa aconteceUm #ifdef GATEWAY_2016 que ninguém sabe se está ligado, uma macro que divide a soma errada, e o compilador recebendo um arquivo que ninguém escreveu.
-
16
Eu não vou compilar 37 arquivos na mãoUm comando de quatro linhas que vira um arquivo, um TAB que não pode ser espaço, e um cabeçalho alterado que ninguém recompilou.
parte 07 Memória que o programa pedeDuzentas e doze fazendas hoje, trezentas no ano que vem, e um gateway que engorda um pouco a cada hora. 2 cap.
-
17
O programa precisa de mais memóriaQuarenta e três fazendas novas em março, um array que só sabe ter duzentos e doze, e a memória que o programa pede e precisa devolver.
-
18
Quem esqueceu de dar free?Dois megabytes por dia, um reinício marcado para domingo às três da manhã, e a ferramenta que conta cada byte que o programa pediu.
parte 08 Lembrar, falhar e receber ordensO histórico que a auditoria pediu, o erro que ninguém verificava, e o programa que aceita argumentos na linha de comando. 3 cap.
-
19
A cooperativa precisa lembrarSessenta e um mil leituras por dia, um auditor que quer ver qualquer uma delas, e a diferença entre guardar o número 100 e guardar o texto 100.
-
20
O programa falhou. Mas por quê?Um cartão de memória cheio, um fopen que devolveu NULL para ninguém, e a convenção que faz cada função de C contar o que deu errado — se alguém perguntar.
-
21
O programa recebe ordensUm caminho /home/valdir escrito no código, a linha com asterisco que o Kauã pulou no primeiro dia, e um array de ponteiros para textos.
parte 09 InvestigarO depurador, os testes, e as ferramentas que enxergam a memória que o olho não vê. 2 cap.
-
22
O programa está mentindo para vocêUm depurador que para o programa onde você manda, um crash que não acontece quando ele está olhando, e um arquivo com a memória inteira do momento da morte.
-
23
Funciona na minha máquinaQuarenta testes que cabem num arquivo, um assert que derruba o programa de propósito, e um compilador que aceita vigiar a memória que o Valgrind não vê.
parte 10 Perto do metalBits, registradores, tipos de tamanho exato, e o código que roda dentro da caixinha presa no tanque. 2 cap.
-
24
O código dentro da caixinhaUm byte de status com oito notícias dentro, dois bytes de temperatura que precisam ser juntados, e um LED que acende escrevendo num endereço.
-
25
Dois kilobytes de RAMQuatro horas sem sinal na Água Limpa, quarenta e oito leituras para guardar num chip que cabe numa unha, e um programa que não pode pedir memória a ninguém.
parte 11 O gateway conversaUm protocolo de doze bytes, um socket TCP, e duzentas e doze caixinhas falando ao mesmo tempo. 3 cap.
-
26
Doze bytesUm JSON de setenta e três bytes que a bateria não paga, uma pergunta sobre a ordem dos bytes que ninguém tinha feito, e um protocolo que cabe numa linha de tabela.
-
27
O gateway atende o telefoneUm cabo serial trocado por uma rede, uma porta 7070 esperando, e doze bytes que às vezes chegam em dois pedaços.
-
28
Duzentas e doze caixinhas ao mesmo tempoUma thread para cada conexão, um contador que soma menos do que deveria, e o cadeado que deixa só uma de cada vez mexer no tanque.
parte 12 Três e dezesseteO crash que só acontece de madrugada, e o código antigo que agora dá para ler. 2 cap.
-
29
A falha das 3h17Onze strcpy no relatório, uma fazenda que trocou de nome em julho, um relógio de quartzo que atrasa dois segundos, e tudo o que o livro ensinou numa única madrugada.
-
30
Agora você sabe onde o programa estáUm auditor escolhendo um tanque ao acaso, um papel novo na parede, e o estagiário lendo o arquivo de 2016 como quem lê uma carta.
Outros livros da série
Assembly One
Do zero ao RISC-V
C# One — Volume 1
Fundamentos de C#
C# One — Volume 2
.NET de verdade
COBOL One
Mainframe para o Século XXI
Java One
Aprenda, evolua, sobreviva e se divirta
JavaScript One
Do primeiro console.log ao painel em produção
Mensageria One
Mensagens, eventos e processamento assíncrono
Receber a prévia
PHP One — Volume 1
Fundamentos do PHP
PHP One — Volume 2
Acelerando com Laravel
Python One
Do primeiro print à API REST em produção
Ruby One
Do primeiro puts ao contrato em produção
O que leitores dizem sobre C One
Carregando avaliações deste livro…
Ver todas as avaliações deste livro →C One
C do zero, dentro de um sistema que já vigia duzentos e doze tanques. O projeto começa a rodar no primeiro capítulo — e não para mais.
Atenção: o idioma desta edição é português.