Buscar

Use a Cabeca C pdf

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 25 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 25 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 25 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Primeiros Elogios ao Use a Cabeça! C
“Use a Cabeça! C possivelmente pode acabar sendo o melhor livro de C de todos os 
tempos. Eu poderia facilmente visualizá-lo se tornando o livro didático padrão para 
curso de faculdade sobre C. A maioria dos livros sobre programação segue um caminho 
relativamente previsível. Este livro, por outro lado, utiliza uma abordagem completamente 
diferente. Ele te ensina a ser um verdadeiro programador em C.”
 — Dave Kitabjian, diretor de Desenvolvimento de Software, NetCarrier Telecom
“ Use a Cabeça! C é uma introdução acessível e animada à programação em C, no clássico 
estilo da série Use a Cabeça!. Figuras, piadas, exercícios e laboratórios guiam o leitor 
suavemente, porém de forma constante, pelos fundamentos de C... antes de avançar para 
tópicos mais avançados de programação em sistemas Posix e Linux.”
 — Vince Milner, desenvolvedor de software
Elogios a outros livros da série 
“O livro de Kathy e Bert Use a Cabeça! Java transforma a página impressa em algo semelhante 
a uma GUI (Interface Gráfica do Utilizador) que você já tenha visto. Com um jeito 
bem-humorado e moderno, os autores fazem do aprendizado de Java uma experiência 
envolvente do tipo ‘o que eles farão a seguir?’”
 — Warren Keuffel, Revista Software Development
“Além do estilo interessante que o leva do saber nada para o status de guerreiro Java, Use a 
Cabeça! Java inclui uma enorme quantidade de assuntos práticos que outros textos deixam 
como o temido ‘exercício para o leitor...’. É inteligente, bem-humorado, moderno e prático 
– e não há muitos livros didáticos que podem fazer tal alegação e cumpri-la, enquanto 
também ensinam serialização de objetos e protocolos de redes.”
 — Dr. Dan Russell, diretor de Pesquisa de Ciência e Experiência do Usuário, 
IBM Centro de Pesquisa Almaden; instrutor de inteligência artificial, 
Universidade de Stanford
“É rápido, irreverente, divertido e interessante. Tome cuidado – você poderá realmente 
aprender alguma coisa!”
 — Ken Arnold, ex-engenheiro sênior da Sun Microsystems; coautor (com James 
Gosling, criador da linguagem Java) do The Java Programming Language
“Me sinto como se mil quilos de livros fossem retirados de cima da minha cabeça.”
 — Ward Cunningham, inventor do Wiki e fundador do Hillside Group
“Exatamente a coisa certa para o guru informal geek em cada um de nós. A referência certa 
para estratégias práticas de desenvolvimento estimula meu cérebro, sem ter de me arrastar 
por um monte de papo cansativo e antiquado de professor.”
 — Travis Kalanick, fundador de Scour e Red Swoosh; membro do MIT TR100 
“Existem livros que você compra, livros que você guarda, livros que você deixa na 
escrivaninha e, graças a O’Reilly e à equipe Use a Cabeça!, há a penúltima categoria, os livros 
Use a Cabeça!. São aqueles livros usados, em péssimo estado, que são levados para todo lugar. 
Use a Cabeça! SQL está no topo da minha pilha. Cara, mesmo o PDF que tenho para revisão 
está esfarrapado e rasgado.”
 — Bill Sawyer, gerente de Currículo ATG, Oracle
“A admirável clareza, o humor e as doses significativas de inteligência tornam o livro ideal 
para resolução de problemas, até mesmo para não programadores.”
 — Cory Doctorow, coeditor de Boing Boing, autor de Down and OUt in the Magic 
Kingdom e Someone Comes to Town, Someone Leaves Town
Elogios a outros livros da série
“Eu recebi o livro ontem e comecei a lê-lo... e não consegui parar. Isso definitivamente é 
très ‘maneiro’. É divertido, porém transmite muito conteúdo, e vai direto ao assunto. Estou 
realmente impressionado.”
 — Erich Gamma, engenheiro distinto da IBM e coautor de Design Patterns
“Um dos livros mais engraçados e inteligentes sobre design de software que já li.”
 — Aaron LaBerge, VP Technology, ESPN.com
“O que antes era um processo de aprendizado demorado de tentativa e erro, agora é 
reduzido nitidamente em um livro cativante.”
 — Mike Davidson, CEO, Newsvine, Inc.
“Design elegante é a essência de cada capítulo aqui, cada conceito transmitido com doses 
iguais de pragmatismo e humor.”
 — Ken Goldstein, vice-presidente executivo, Disney Online
“Eu ! Use a Cabeça! HTML com CSS e XHTML – ele ensina tudo o que você precisa aprender 
em um formato revestido de diversão.”
 — Sally Applin, designer IU e artista
“Geralmente quando leio um livro ou artigo sobre padrões de projetos, preciso 
ocasionalmente optar por medidas drásticas para me certificar de que estou prestando 
atenção. Não com este livro. Por mais estranho que pareça, ele faz com que seja 
divertido aprender. 
Enquanto outros livros estão dizendo ‘Bueller...Bueller...Bueller’, este livro está no carro 
alegórico dizendo ‘Shake it up, baby!’”
 — Eric Wuehler
“Eu literalmente amo este livro. De fato, eu o beijei na frente da minha mulher.”
 — Satish Kumar
Outros livros da série Use a Cabeça! 
Use a Cabeça! Ajax Profissional
Use a Cabeça! Álgebra
Use a Cabeça! Análise e Projeto Orientado ao Objeto
Use a Cabeça! Análise de Dados
Use a Cabeça! C# – 2ª Edição
Use a Cabeça! Desenvolvimento de Software
Use a Cabeça! Desenvolvendo para iPhone & iPad
Use a Cabeça! Estatística
Use a Cabeça! Excel
Use a Cabeça! Física
Use a Cabeça! Geometria 2D
Use a Cabeça! Java – 2ª Edição
Use a Cabeça! JavaScript
Use a Cabeça! jQuery
Use a Cabeça! Mobile Web
Use a Cabeça! Padrões de Projetos – 2ª Edição
Use a Cabeça! Programação
Use a Cabeça! PHP & MySQL
Use a Cabeça! PMP
Use a Cabeça! Python
Use a Cabeça! Rails – 2ª Edição 
Use a Cabeça! Redes de Computadores
Use a Cabeça! Servlets & JSP – 2ª Edição
Use a Cabeça! SQL
Use a Cabeça! Web Design
Use a Cabeça! C
Não seria maravilhoso se existisse 
um livro sobre C que fosse mais 
fácil de entender do que o manual 
de operação de um ônibus espacial? 
Acho que é apenas um sonho...
David Griffiths
Dawn Griffiths
Rio de Janeiro, 2013
Para Dennis Ritchie (1941-2011), o pai do C.
os autores
viii
Autores de Use a Cabeça! C
David Griffit
hs
Dawn Griffiths
David Griffiths começou a programar 
aos 12 anos de idade, quando viu um 
documentário sobre o trabalho de 
Seymour Papert. Aos 15, ele escreveu uma 
implementação da linguagem computacional 
de Papert, o LOGO. Depois de estudar 
matemática na universidade, começou a 
escrever código para computadores e artigos 
de revista para humanos. Ele trabalhou como 
coach de metodologias ágeis, programador e 
atendente de garagem, mas não nesta ordem. 
David Griffiths pode escrever código em mais 
de dez linguagens, e prosa em apenas uma, e, 
quando não está escrevendo, programando, 
ou trabalhando como coach, ele passa a maior 
parte do seu tempo livre com sua adorável 
esposa – e coautora, – Dawn.
Antes de escrever Use a Cabeça! C, 
David escreveu dois outros livros Use a 
Cabeça!: Use a Cabeça! Rails e Use a Cabeça! 
Programação.
Você pode seguir o David no Twitter:
http://twitter.com/dogriffiths.
Dawn Griffiths começou a vida 
matemática em uma universidade top 
do Reino Unido, onde foi premiada 
como primeira da classe de licenciatura. 
Ela passou a seguir uma carreira em 
desenvolvimento de software e tem mais de 
quinze anos de experiência na indústria de 
Tecnologia da Informação.
Antes de juntar forças com David em Use a 
Cabeça! C, Dawn escreveu outros dois livros 
Use a Cabeça! (Use a Cabeça! Estatística e Use 
a Cabeça! Geometria 2D) e também trabalhou 
em muitos outros livros da série.
Quando Dawn não está trabalhando, você 
a verá aprimorando suas habilidades de Tai 
Chi, correndo, confeccionando renda de 
bilro, ou cozinhando. Ela também curte 
viajar e passar o tempo com seu marido, 
David.
conteúdo
você está aqui ! ix
Conteúdo Resumido
 Introdução xxvii
1 Começando com c: Mergulhando de cabeça 1
2 Memóriae ponteiros: Para o que está apontando? 41
2.5 Strings: Teoria de strings 83
3 Criando ferramentas pequenas: Faça uma coisa e faça-a bem 103
4 Usando múltiplos arquivos fonte: Desmonte e reconstrua 157
 C Lab 1: Arduino 207
5 Structs, unions e bitfields: Criando suas próprias estruturas 217
6 Estruturas de dados e memória dinâmica: Construindo pontes 267
7 Funções avançadas: Aumente suas funções para onze 311
8 Bibliotecas estáticas e dinâmicas: Código Hot-Swappable 351
 C Lab2: OpenCV 389
9 Processos e chamadas de sistema: Quebrando limites 397
10 Comunicação entre processos: É bom conversar. 429
11 Sockets e redes: Não há lugar como 127.0.0.1 467
12 Threads: É um mundo paralelo 501
 C Lab 3: Blasteroids 523
i Sobras: As dez melhores coisas (que não cobrimos) 539
ii Tópicos C: Revisão geral 553
Conteúdo
Introdução
 Seu cérebro sobre C. Aqui você está tentando aprender algo; 
enquanto isso, aqui está o seu cérebro lhe fazendo o favor de se certificar de 
que o aprendizado não role. Seu cérebro está pensando: “É melhor deixar 
espaço para coisas mais importantes, como quais animais selvagens evitar e 
se praticar snowboarding pelado é uma má ideia”. Então, como você engana 
seu cérebro para que ele pense que sua vida depende de conhecer C?
A quem se destina este livro? xxviii
Sabemos o que você está pensando xxix
Metacognição: xxxi
Leve sua mente à submissão xxxiii
Leia-me xxxiv
Revisão técnica xxxvi
Agradecimentos xxxvii
conteúdo
x
começando com c
Mergulhando de cabeça1 Quer entrar de cabeça no computador? Precisa escrever um código de alta performance para um novo jogo? Programar um Arduino? 
Ou usar aquela biblioteca de terceiros avançada no seu app de iPhone? 
Se for o caso, então C está aqui para ajudar. C funciona em um nível muito 
mais baixo que outras linguagens; então, entender C te dá uma ideia 
muito melhor do que realmente está acontecendo. C até pode te ajudar a 
entender melhor outras linguagens. Então, mergulhe de cabeça, pegue seu 
compilador, e você começará em pouco tempo.
C é uma linguagem para programas pequenos e rápidos 2
Mas o que um programa C completo parece? 5
Mas como você executa o programa? 9
Dois tipos de comandos 14
Aqui está o código até agora 15
Contar cartas? Em C? 17
Há mais em booleanos que igual... 18
Como está o código agora? 25
Usando o velho switch 26
Às vezes, uma vez não é o bastante... 29
Loops frequentemente usam a mesma estrutura... 30
Use break para fugir... 31
Sua Caixa de Ferramentas C 40
conteúdo
xi
1
2
GLOBAIS
CONSTANTES
LINK A6, #VARSIZE
MOVEM.L DO-D7/A1-A5, (SP)
MOVE.L SP, SAVESTK(A6)
MOVE.L SP, SAVEAS(A6)
MOVE.L GRAFGLOBALS(A5), AO
memória e ponteiros
Para o que está apontando?2 Se você realmente quer arrasar com C, você precisa entender como C gerencia memória. A linguagem C lhe 
dá muito mais controle sobre como seu programa usa a memória do 
computador. Neste capítulo, você irá abaixo da superfície e verá exatamente 
o que acontece quando lê e cria variáveis. Você aprenderá como arrays 
funcionam, como evitar desagradáveis desastres de memória e, mais 
importante que tudo, verá como dominar ponteiros e endereçamento de 
memória é chave para se tornar um programador fera em C.
Código C inclui ponteiros 42
Escavando na memória 43
Navegue com ponteiros 44
Tente passar um ponteiro para a variável 47
Usando ponteiros de memória 48
Como passar uma string para uma função? 53
Variáveis array são como ponteiros... 54
O que o computador pensa quando executa seu código 55
Mas variáveis array não são exatamente ponteiros. 59
Porque arrays na realidade começam no 0 61
Por que ponteiros têm tipos? 62
Usando ponteiros para entrada de dados 65
Tome cuidado com scanf() 66
fgets() é uma alternativa para scanf() 67
String literais nunca podem ser atualizadas. 72
Se for modificar uma string, faça uma cópia. 74
Memorizador de memória 80
Sua Caixa de Ferramentas C 81
conteúdo
xii
strings
Teoria de strings
 Existe mais em strings do que apenas a leitura. Você viu 
como strings em C são, na realidade, arrays de char, mas o que C te deixa 
fazer com elas? Isto é, quando string.h entra em jogo. string.h é uma parte 
da Biblioteca Padrão do C que é dedicada à manipulação de strings. Se 
quiser concatenar strings, copiar uma string para outra ou comparar duas 
strings, as funções em string.h estão à sua disposição. Neste capítulo, verá 
como criar um array de strings e, depois, verá exatamente como realizar 
buscas em strings usando a função strstr().
Procura-se Frank desesperadamente 84
Crie um array de arrays 85
Encontre strings contendo o texto de busca 86
Usando a função strstr() 89
Tá na hora de revisar o código 94
Array de arrays vs. array de ponteiros 98
Sua Caixa de Ferramentas C 101
conteúdo
xiii
criando ferramentas pequenas
Faça uma coisa, e faça-a bem3 Todo sistema operacional inclui ferramentas 
pequenas. Ferramentas pequenas escritas em C realizam pequenas 
tarefas especializadas, tais como ler e escrever arquivos ou filtrar dados. Se 
quiser realizar tarefas mais complexas, pode até ligar diversas ferramentas 
juntas. Mas como estas ferramentas pequenas são criadas? Neste capítulo, 
você verá a matéria-prima para a fabricação das ferramentas pequenas. 
Você descobrirá como controlar as opções da linha de comando e como 
gerenciar tráfego de informação e redirecionamento, criando ferramentas 
em pouco tempo.
Ferramentas pequenas podem solucionar grandes problemas 104
Aqui está como o programa deveria funcionar 108
Mas você não está usando arquivos... 109
Pode usar redirecionamento 110
Apresentando o Erro Padrão 120
Por default, o Erro Padrão é enviado ao display 121
fprintf() imprime para um fluxo de dados 122
Vamos atualizar o código para usar fprintf() 123
Ferramentas pequenas são flexíveis 128
Não mude a ferramenta geo2json 129
Uma tarefa diferente precisa de uma ferramenta diferente. 130
Ligue sua entrada e saída com um pipe 131
A ferramenta bermuda 132
Mas e se quiser enviar output para mais de um arquivo? 137
Crie seus próprios fluxos de dados 138
Existe mais na main() 141
Deixe a biblioteca fazer o seu trabalho 149
Sua Caixa de Ferramentas C 156
conteúdo
xiv
usando múltiplos arquivos fonte
Desmonte e reconstrua4 Se for criar um grande programa, você não quer grandes arquivos fonte. Você consegue imaginar como seria difícil 
e demorado fazer a manutenção de um único arquivo fonte para um programa 
a nível empresarial? Neste capítulo, você aprenderá como C permite quebrar 
seu código-fonte em segmentos pequenos e gerenciáveis e, depois, 
reconstruí-los em um grande programa. Durante o caminho, aprenderá um 
pouco mais sobre sutilezas de tipos de dados e conhecerá seu novo melhor 
amigo: make.
Seu guia rápido para tipos de dados 162
Não coloque algo grande em algo pequeno 163
Use casting para colocar floats em números inteiros 164
Essa não... os atores sem emprego... 168
Vamos ver o que aconteceu com o código 169
Compiladores não gostam de surpresas 171
Separe a declaração da definição 173
Criando seu primeiro arquivo header 174
Se tiver características em comum... 182
Pode dividir o código em arquivos separados 183
Compilação por trás das cenas 184
O código compartilhado precisa de seu
 próprio arquivo header 186
Não é física quântica… ou será que é? 189
Não recompile cada arquivo 190
Primeiro compile a fonte em arquivos objetos 191
É difícil manter o controle sob os arquivos 196
Automatize seus builds com a ferramenta make 198
Como make funciona 199
Mostre seu código para make com makefile. 200
Sua Caixa de Ferramentas C 206
conteúdoxv
conteúdoconteúdo
C Lab 1
Arduino
Você sempre quis que suas plantas pudessem 
te dizer quando precisam ser regadas? Bem, 
com Arduino elas podem! Neste lab, você 
criará um monitor de planta alimentado por 
Arduino todo programado em C.
conteúdo
xvi
structs, unions e bitfields
Criando suas próprias estruturas5 A maioria das coisas na vida é mais complexa que um simples número. Até agora, temos visto os tipos básicos de dados 
da linguagem C, mas e se você quiser ir além dos números e segmentos de 
texto e modelar as coisas no mundo real? structs permitem que você 
modele complexidades do mundo real através da criação de suas próprias 
estruturas. Neste capítulo, você aprenderá como combinar os tipos básicos 
de dados em structs e até manejar as incertezas da vida com unions. 
E, se quiser um simples sim ou não, bitfields podem ser exatamente o que 
você precisa.
Às vezes, você precisa distribuir muitos dados. 218
Conversa de cubículo 219
Crie seu próprio tipo estruturado de dados com um struct 220
Só dê-lhes o peixe 221
Leia os campos do struct com o operador “.” 222
É possível colocar um struct dentro do outro? 227
Como você atualiza um struct? 236
O código está clonando a tartaruga 238
Você precisa de um ponteiro para o struct 239
(*t).age vs. *t.age 240
Às vezes, o mesmo tipo de coisa precisa de tipos
diferentes de dados. 246
Um union deixa você reutilizar espaço de memória. 247
Como se usa o union? 248
Uma variável enum armazena um símbolo 255
Às vezes, você quer controlar o nível de bits. 261
Bitfields armazenam uma quantidade
customizável de bits 262
Sua Caixa de Ferramentas C 266
conteúdo
xvii
estruturas de dados e memória dinâmica
Construindo pontes6 Às vezes, um único struct simplesmente não é o suficiente. Para modelar requisitos complexos de dados, você 
frequentemente precisa juntar structs. Neste capítulo, você verá 
como usar ponteiros struct para ligar tipos customizados de dados em 
estruturas de dados grandes e complexas. Você explorará princípios-
chave, criando listas encadeadas. Você também verá como fazer com que 
suas estruturas de dados aceitem quantidades flexíveis de dados, alocando 
memória dinamicamente no heap e liberando a memória quando tiver 
terminado. E, se a boa economia doméstica ficar complicada, também 
aprenderá como valgrind pode ajudar.
Você precisa de armazenamento flexível? 268
Listas encadeadas são como correntes de dados. 269
Listas encadeadas permitem inserções. 270
Crie uma estrutura recursiva 271
Crie ilhas em C... 272
Inserindo valores na lista 273
Use o heap para armazenamento dinâmico 278
Devolva a memória quando terminar 279
Peça memória com malloc()... 280
Vamos consertar o código usando a função strdup() 286
Libere a memória ao terminar 290
Uma visão geral do sistema SIPS 300
Software Forense: usando valgrind 302
Use valgrind repetidamente para coletar mais evidência. 303
Olhe a evidência 304
A solução em julgamento 307
Sua Caixa de Ferramentas C 309
conteúdo
xviii
funções avançadas
Aumente suas funções para onze7 Funções básicas são ótimas, mas às vezes você precisa de mais. Até agora, você tem se concentrado no básico. Mas 
e se precisar de ainda mais poder e flexibilidade para conseguir o que quer? 
Neste capítulo, você verá como aumentar o QI do seu código passando 
funções como parâmetros. Você descobrirá como organizar as coisas com 
funções de comparação. E, finalmente, descobrirá como fazer seu código 
muito flexível com funções com argumentos variáveis.
Procurando o Sr. Certo... 312
Passando código a uma função 316
Você precisa dizer para find() o nome de uma função. 317
Todo nome de função é um ponteiro para a função... 318
...mas não existe tipo de dados function 319
Como criar ponteiros para funções 320
Organize-se com a Biblioteca Padrão C 325
Use os ponteiros para funções para pôr as coisas em ordem. 326
Automatizando as cartas da agência de namoro 334
Crie um array de ponteiros para funções 338
Faça sua função flexível 343
Sua Caixa de Ferramentas C 350
conteúdo
xix
bibliotecas estáticas e dinâmicas
Código Hot-Swappable8 Você já viu o poder de bibliotecas padrão. Agora chegou a hora de usar este poder para o seu código. Neste capítulo, verá como 
criar suas próprias bibliotecas e reutilizar o mesmo código em vários 
programas. E mais, aprenderá como compartilhar código durante o tempo 
de execução com bibliotecas dinâmicas e os segredos dos programadores 
gurus. E, ao terminar o capítulo, você será capaz de escrever código escalável 
que poderá ser dimensionado e gerenciado de forma simples e eficiente.
Código que você pode levar ao banco 352
Maior e menor são para headers padrão 354
Mas e se quiser compartilhar código? 355
Compartilhando arquivos header .h 356
Compartilhe arquivos de objetos .o usando o
pathname completo 357
Um depósito contém arquivos .o. 358
Crie um arquivo com o comando ar... 359
Finalmente, compile seus outros programas. 360
A Academia Use a Cabeça! está virando global. 365
Calculando calorias 366
Mas as coisas são um pouco mais complexas... 369
Programas são compostos de vários pedaços... 370
Ligações dinâmicas acontecem durante o
tempo de execução 372
Dá para fazer uma ligação .a durante o tempo
de execução? 373
Primeiro crie um arquivo objeto 374
O nome que der para sua biblioteca dinâmica depende
da sua plataforma. 375
Sua Caixa de Ferramentas C 387
conteúdo
xx
conteúdoconteúdo
C Lab2
OpenCV
Imagine se seu computador pudesse ficar de 
olho na sua casa, enquanto você está fora, e 
te dizer quem tem perambulado por aí. Neste 
lab, você criará um detector de intrusos à 
base de C usando a astúcia do OpenCV.
conteúdo
xxi
processos e chamadas de sistema
Quebrando limites9 Está na hora de pensar fora da caixa Você já sabe que pode criar aplicativos complexos conectando ferramentas pequenas na linha de 
comando. Mas, e se quiser usar outros programas do seu próprio código? 
Neste capítulo, você aprenderá como usar serviços do sistema para criar e 
controlar processos. Com isso, seus programas terão acesso a e-mail, web e 
quaisquer outras ferramentas que tenha instalado. Ao terminar este capítulo, 
você terá a capacidade de ir além do C.
Chamadas ao sistema são sua conexão ao SO 398
Aí alguém invadiu o sistema... 402
Segurança não é o único problema 403
As funções exec() lhe dão mais controle 404
Há várias funções exec() 405
As funções array: execv(), execpv(), execve() 406
Passando variáveis de ambiente 407
A maioria das chamadas de sistema cometem
o mesmo erro 408
Leia as notícias com RSS 416
exec() é o fim da linha para o seu programa 420
Executando um processo filho com fork() + exec() 421
Sua Caixa de Ferramentas C 427
conteúdo
xxii
comunicação entre processos
É bom conversar10 Criar processos é apenas metade da história E se você quiser controlar o processo quando este estiver em execução? E se quiser 
enviar dados para ele? Comunicação entre processos os deixa realizar o 
trabalho em conjunto. Vamos te mostrar como multiplicar o poder do seu 
código deixando ele conversar com outros programas no seu sistema.
Redirecionando a entrada e a saída 430
Olhando por dentro de um processo típico 431
Redirecionamento simplesmente substitui o fluxo de dados 432
fileno() te diz qual é o descritor 433
Às vezes, você precisa esperar... 438
Fique em contato com seu filho 442
Conecte seus processos com pipes 443
Estudo de caso: abrindo histórias em um navegador 444
No filho 445
No pai 445
Abrindo uma página web em um navegador 446
A morte de um processo 451
Pegando os sinais e executando o seu código 452
sigactionssão registradas com sigaction() 453
Reescrevendo o código para
usar um tratador de sinais 454
Use kill para enviar sinais 457
Enviando uma chamada de alerta
para seu código 458
Sua Caixa de Ferramentas C 466
 
 
 
 
 
conteúdo
xxiii
sockets e redes
Não há lugar como 127.0.0.111 Programas em máquinas diferentes precisam conversar. Você aprendeu como usar I/O para se comunicar com arquivos 
e como processos na mesma máquina podem se comunicar entre si. Agora 
você vai precisar entrar em contato com o resto do mundo e aprender como 
escrever programas em C que podem conversar com outros programas do 
outro lado da rede e do outro lado do mundo. Ao terminar este capítulo, 
você será capaz de criar programas que atuam como servers e programas 
que atuam como clientes.
O servidor de internet knock-knock 468
Visão geral do servidor knock-knock 469
BLAB: como servidores conversam com a internet 470
Um socket não é um típico fluxo de dados 472
Às vezes o servidor não inicializa corretamente. 476
O motivo pelo qual sua mãe sempre mandou
verificar seu trabalho 477
Lendo dados do cliente 478
O servidor só pode falar com uma pessoa por vez. 485
Você pode fork() um processo para cada cliente 486
Escrevendo um cliente web 490
Clientes que mandam 491
Crie um socket para um endereço IP 492
getaddrinfo() pega endereços para domínios 493
Sua Caixa de Ferramentas C 500
conteúdo
xxiv
Variável
compartilhada
AA
BB
threads
É um mundo paralelo12 Frequentemente programas precisam fazer diversas coisas ao mesmo tempo. Threads POSIX podem fazer seu código 
mais interativo, separando alguns segmentos de código para serem 
executados em paralelo. Mas tenha cuidado! Threads são ferramentas 
poderosas, mas você não quer que elas entrem em colisão. Neste capítulo, 
você aprenderá como colocar sinais de trânsito e marcadores de pista 
que irão prevenir um acidente de código. No final, você saberá como criar 
threads POSIX e como usar mecanismos de sincronização para proteger a 
autenticidade de dados sensitivos.
Tarefas são sequenciais... ou não... 502
...e processos não são sempre a solução 503
Processos simples fazem uma coisa de cada vez 504
Contrate funcionários extras: use threads 505
Como se criam threads? 506
Crie threads com pthread_create. 507
O código não é seguro para threads 512
Você precisa acrescentar sinais de trânsito 513
Use mutex como sinal de trânsito 514
Sua Caixa de Ferramentas C 521
conteúdo
xxv
conteúdoconteúdo
C Lab 3
Blasteroids
Neste lab, você fará um tributo a um dos 
videogames mais populares e de longa 
vida entre todos. Está na hora de criar 
Blasteroids!
conteúdo
xxvi
sobras
As dez melhores coisas (que não 
cobrimos)i Mesmo depois de tudo aquilo, ainda tem mais um 
pouquinho. Tem mais algumas coisas que achamos que você precisa 
saber. Não nos sentiríamos bem ignorando-as, mesmo que precisem de uma 
breve menção, e nós realmente queremos lhe dar um livro que você possa 
carregar sem treinamento intensivo na academia do bairro. Então, antes de 
guardar este livro, leia estes acréscimos.
1. Operadores 540
2. Diretivas do pré-processador 542
3. A palavra-chave static 543
4. Qual o tamanho das coisas 544
5. Testes automatizados 545
6. Mais sobre gcc 546
7. Mais sobre make 548
8. Ferramentas de desenvolvimento 550
9. Criando GUIs 551
10. Material de referência 552
Tópicos C
Revisão geralii Você já quis que todos aqueles ótimos fatos sobre C estivessem em um só lugar? Essa é uma reunião de todos os 
tópicos e princípios de C que apresentamos no livro. Dê uma olhada 
e veja se consegue se lembrar de todos. Cada fato tem o capítulo 
de origem ao lado, então fica fácil procurar a referência se precisar 
de um lembrete. Talvez você até queira destacar estas páginas 
para colocar na sua parede.

Outros materiais