1 Introduktion 15 1.1 Unixsystem? 16 1.2 Bokens exempelprogram 16 1.3 Andra utgåvan 17 1.4 Tredje utgåvan 18 2 Kort historia 19 2.1 Högnivåspråken utvecklas 22 2.2 Andra Unixliknande system 23 3 Installera nödvändiga verktyg 25 3.1 Navigera i de inbyggda man-sidorna 26 4 Introduktion till C 29 4.1 Ett första exempel 31 4.2 Ett exempel med indata 35 4.2.1 Första varianten 35 4.2.1.1 Spill över med flit 38 4.2.2 Andra varianten 39 4.3 Övningsuppgifter 44 5 Variabler och datatyper i C 45 5.1 Variabelnamn 46 5.2 Heltal 48 5.2.1 Portabilitet 50 5.2.2 Signed och unsigned int 52 5.2.3 Tecken, char 55 5.3 Flyttal 56 5.4 Fält av tal 57 5.5 Uppräkningstypen enum 58 5.6 Konstruktioner, struct 59 5.6.1 Storleken på konstruktioner 64 5.7 Egna datatyper med typedef 66 5.8 Unioner 70 5.9 Konstanter 73 5.10 Omvandla mellan olika typer 75 5.11 Aritmetik 77 5.11.1 Modulo-operatorn 80 5.12 Övningsuppgifter 82 6 Loopar & villkor 85 6.1 Jämförelseoperatorer 85 6.2 Olika villkorssatser i C 86 6.3 if-satsen 86 6.4 Logiska operatorer 91 6.5 Nästlade if-satser 93 6.6 Jämföra strängar 95 6.7 Switch-satsen 97 6.8 Loopar 99 6.8.1 for-loopen 99 6.8.1.1 Utesluta delar i for-loopen 103 6.8.2 while-loopen 105 6.8.3 do while 107 6.8.4 Avbryta en loop med break 108 6.8.5 Hoppa över iterationer med continue 110 6.9 Övningsuppgifter 111 7 Bitvisa operationer 113 7.1 Bitvis OCH & bitvis ELLER 113 7.1.1 Exklusiv ELLER 117 7.2 Bitvis skiftning 118 7.3 Negation 119 7.3.1 Negation och signerade heltal 120 7.4 Övningsuppgifter 121 8 Funktioner, del 1 123 8.1 En första egen funktion 125 8.2 Funktionsprototyp och funktionskropp 126 8.3 Returtyper och argument 127 8.4 Placera funktioner i separata filer 131 8.5 Övningsuppgifter 133 9 Minneshantering 135 9.1 Heap och stack 135 9.1.1 BSS, data och text 137 9.1.2 Stack frames 138 9.2 Scope 138 9.2.1 Block-scope 140 9.2.1.1 Global 142 9.2.1.2 Static 144 9.2.2 Filbaserat scope 146 9.3 Dynamisk minneshantering 148 9.4 Allting handlar om null-tecknet 153 9.5 Övningsuppgifter 159 10 Pekare 163 10.1 Adressen till teckenfält 165 10.2 Skapa pekare 167 10.3 Mer om fält, strängar och pekare 170 10.3.1 Andra typer av fält 173 10.4 Pekare till pekare 175 10.4.1 Använda pekare till pekare för fält 176 10.5 Övningsuppgifter 178 11 Funktioner, del 2 181 11.1 main() 181 11.1.1 Behandla argument till programmet 183 11.1.1.1 Förklaring av resten av simple-ls 191 11.2 Fält som argument och retur 192 11.2.1 Fält som argument 192 11.2.2 Returnera ett fält 194 11.2.3 Call by reference 196 11.3 Övningsuppgifter 197 12 Filhantering 199 12.1 Strömmar och fildeskriptorer 200 12.2 Skriva till filer med filströmmar 200 12.3 Läsa från filer med filströmmar 203 12.3.1 Läsa in specifikt innehåll 208 12.4 stdin, stdout och stderr 210 12.5 Förflytta sig i en fil 211 12.6 Skriva och läsa med fildeskriptorer 213 12.7 Skriva och läsa binärdata 215 12.7.1 Skriva och läsa en enstaka variabel 216 12.7.2 Skriva fält till en fil 218 12.7.2.1 Blanda olika datatyper 221 12.7.3 Lagra strukturer i filer 222 12.7.4 Ett komplett lagerhanteringsprogram 225 12.8 Övningsuppgifter 236 13 Introduktion till systemanrop 237 13.1 Filsystem och rättigheter 240 13.1.1 Rättigheter som oktala tal 242 13.1.2 umask 243 13.2 Två exempelprogram 245 13.2.1 Enkelt program för filinformation 245 13.2.2 Program för att ändra ägaren av en fil 246 13.3 Systemanrop, datatyper och C-standarder 248 13.4 Felhantering och errno 252 13.5 En egen version av touch 257 13.6 Många fler systemanrop 258 13.7 Övningsuppgifter 262 14 Kommunicera med skalet och andra program 265 14.1 Rörledningar 267 14.2 Returkoder 270 14.3 Omdirigera data till och från filer 271 14.3.1 Skriva till stderr i C 274 14.4 Knyta samman returkoder, rörledningar och omdirigeringar 275 14.5 Miljövariabler 279 14.5.1 Läsa och sätta miljövariabler i C 281 14.6 Övningsuppgifter 283 15 Kompilatorn, objektfiler och make 285 15.1 De fyra stegen 285 15.1.1 Preprocessorn 287 15.1.2 Kompilering 288 15.1.3 Assembly 290 15.1.4 Linker 290 15.2 Ett par nyttiga flaggor 291 15.3 Make 292 15.3.1 En Makefile för ett projekt 293 15.3.1.1 En smartare Makefile 299 15.3.1.2 Fler variabler och mål 301 15.4 Delade bibliotek 303 15.4.1 Statiska bibliotek 304 15.4.2 Dynamiska bibliotek 307 15.4.2.1 Titta i det dynamiska biblioteket 308 15.4.2.2 Installera biblioteket i systemet 309 15.4.2.3 Använda biblioteket i ett program 310 15.4.2.4 macOS 311 15.4.2.5 Använda tredjepartsbibliotek 314 15.5 Övningsuppgifter 314 16 Processer, demoner, barn och föräldrar 317 16.1 Introduktion till exec() 323 16.2 Introduktion till fork() 325 16.2.1 Zombie-processer 329 16.3 system() 331 16.4 Demoner 332 16.5 Övningsuppgifter 335 17 IPC 339 17.1 Signalhantering 340 17.1.1 Utöka demonen med signalhanterare 341 17.1.1.1 Utöka med ytterligare signalhanterare 346 17.1.1.2 Utöka med ett klientprogram 350 17.2 Pipes (rörledningar) 352 17.3 FIFO (namngivna rörledningar) 354 17.3.1 C och FIFO 357 17.4 Meddelandeköer 361 17.5 Unix-sockets 367 17.5.1 En tidsserver över en Unix-socket 368 17.5.2 Klient till tidsservern 372 17.6 Övningsuppgifter 373 18 TCP/IP 375 18.1 Server/klient med UDP 375 18.1.1 Serverprogrammet 376 18.1.2 Klientprogrammet 380 18.2 Server/klient med TCP 383 18.2.1 Serverprogrammet 383 18.2.2 Klientprogrammet 387 18.3 Namnuppslagning 390 19 Felsökning 393 19.1 GDB och LLDB 394 19.1.1 Installera GDB / LLDB 395 19.1.2 Stega igenom ett enkelt program 395 19.1.3 Övervaka variabler 399 19.1.4 Modifiera variabler under körning 402 19.1.5 Program med flera funktioner och argument 402 19.1.6 Titta i minnesadresser 405 19.1.7 Undersöka minnet på djupet 407 19.1.8 Felsöka barnprocesser 410 19.1.8.1 GDB 411 19.1.8.2 LLDB 412 19.2 Valgrind 412 19.2.1 Installera Valgrind 412 19.2.2 Använda Valgrind 415 19.2.3 Mer svårupptäckta minnesproblem 419 19.3 Övningsuppgifter 423 20 Avslutning 425 Appendix A (ASCII-tabell) 427 Appendix B (Talsystem) 433 Bitar, bytes och det binära talsystemet 433 Omvandla mellan binärt och decimalt 434 Signerade tal 435 Hexadecimala talsystemet 436 Till och från binärt 437 Hexadecimalt till decimalt 439 Räkna ut större och mer komplicerade tal 442 Oktala talsystemet 442 Till och från binärt 443 Oktalt till decimalt 444 Använda bc för att omvandla mellan olika talsystem 447 Källor 449