Baixe o app para aproveitar ainda mais
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.
Compartilhar