1 Introduktion                                      15
  1.1 UNIX-system?                                    16
  1.2 Bokens exempelprogram                           16
  1.3 Andra utgåvan                                   17

2 Kort historia                                       19
  2.1 Högnivåspråken utvecklas                        22
  2.2 Andra UNIX-liknande system                      22
  
3 Installera nödvändiga verktyg                       25
  3.1 Navigera i de inbygga 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                   53
      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                                      72
  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                              104
      6.8.3 do while                                  106
      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                            118
  7.2 Bitvis skiftning                                118
  7.3 Negation                                        119
  7.4 Övningsuppgifter                                120

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      175
  10.5 Övningsuppgifter                               178

11 Funktioner, del 2                                  179
  11.1 main()                                         179
      11.1.1 Behandla argument till programmet        181
          11.1.1.1 Förklaring av resten av simple-ls  189
  11.2 Fält som argument och retur                    190
      11.2.1 Fält som argument                        190
      11.2.2 Returnera ett fält                       192
      11.2.3 Call by reference                        194
  11.3 Övningsuppgifter                               195
  
12 Filhantering                                       197
  12.1 Strömmar och ldeskriptorer                    198
  12.2 Skriva till filer med filströmmar              198
  12.3 Läsa från filer med filströmmar                201
      12.3.1 Läsa in specifkt innehåll                207
  12.4 stdin, stdout och stderr                       208
  12.5 Förflytta sig i en fil                         210
  12.6 Skriva och läsa med fildeskriptorer            211
  12.7 Skriva och läsa binärdata                      213
      12.7.1 Skriva och läsa en enstaka variabel      214
      12.7.2 Skriva fält till en fil                  216
          12.7.2.1 Blanda olika datatyper             219
      12.7.3 Lagra strukturer i filer                 220
      12.7.4 Ett komplett lagerhanteringsprogram      223
  12.8 Övningsuppgifter                               234

13 Introduktion till systemanrop                      235
  13.1 Filsystem och rättigheter                      238
      13.1.1 Rättigheter som oktala tal               240
      13.1.2 umask                                    241
  13.2 Två exempelprogram                             243
      13.2.1 Enkelt program för filinformation        243
      13.2.2 Program för att ändra ägaren av en fil   244
  13.3 Systemanrop, datatyper och C-standarder        246
  13.4 Felhantering och errno                         249
  13.5 En egen version av touch                       254
  13.6 Många fler systemanrop                         255
  13.7 Övningsuppgifter                               260

14 Kommunicera med skalet och andra program           263
  14.1 Rörledningar                                   265
  14.2 Returkoder                                     268
  14.3 Omdirigera data till och från filer            269
      14.3.1 Skriva till stderr i C                   272
  14.4 Knyta samman returkoder, rörledningar och omdir273
  14.5 Miljövariabler                                 277
      14.5.1 Läsa och sätta miljövariabler i C        279
  14.6 Övningsuppgifter                               281
  
15 Kompilatorn, objektfiler och make                  283
  15.1 De fyra stegen                                 283
      15.1.1 Preprocessorn                            285
      15.1.2 Kompilering                              286
      15.1.3 Assembly                                 288
      15.1.4 Linker                                   288
  15.2 Ett par nyttiga flaggor                        289
  15.3 Make                                           290
      15.3.1 En Makefile för ett projekt              291
          15.3.1.1 En smartare Makefile               297
          15.3.1.2 Fler variabler och mål             299
  15.4 Delade bibliotek                               301
      15.4.1 Statiska bibliotek                       302
      15.4.2 Dynamiska bibliotek                      305
          15.4.2.1 Titta i det dynamiska biblioteket  306
          15.4.2.2 Installera biblioteket i systemet  307
          15.4.2.3 Använda biblioteket i ett program  308
          15.4.2.4 macOS                              309
          15.4.2.5 Använda tredjepartsbibliotek       312
  15.5 Övningsuppgifter                               312

16 Processer, demoner, barn och föräldrar             315
  16.1 Introduktion till exec()                       321
  16.2 Introduktion till fork()                       323
      16.2.1 Zombie-processer                         327
  16.3 system()                                       329
  16.4 Demoner                                        330
  16.5 Övningsuppgifter                               333

17 IPC 337
  17.1 Signalhantering                                338
      17.1.1 Utöka demonen med signalhanterare        339
          17.1.1.1 Utöka med ytterligare signalhantera343
          17.1.1.2 Utöka med ett klientprogram        347
  17.2 Pipes (rörledningar)                           350
  17.3 FIFO (namngivna rörledningar)                  351
      17.3.1 C och FIFO                               355
  17.4 Meddelandeköer                                 358
  17.5 Övningsuppgifter                               364

18 Felsökning                                         367
  18.1 GDB och LLDB                                   368
      18.1.1 Installera GDB / LLDB                    369
      18.1.2 Stega igenom ett enkelt program          369
      18.1.3 Övervaka variabler                       373
      18.1.4 Modifiera variabler under körning        376
      18.1.5 Program med flera funktioner och argument376
      18.1.6 Titta i minnesadresser                   379
      18.1.7 Undersöka minnet på djupet               381
      18.1.8 Felsöka barnprocesser                    384
      18.1.8.1 GDB.                                   385
      18.1.8.2 LLDB                                   386
  18.2 Valgrind                                       389
      18.2.1 Installera Valgrind                      389
      18.2.2 Använda Valgrind                         391
      18.2.3 Mer svårupptäckta minnesproblem          395
  18.3 Övningsuppgifter                               399

19 Avslutning                                         401

Appendix A (ASCII-tabell)                             403

Appendix B (Talsystem)                                409
  Bitar, bytes och det binära talsystemet             409
      Omvandla mellan binärt och decimalt             411
  Hexadecimala talsystemet                            412
      Till och från binärt                            413
      Hexadecimalt till decimalt                      414
      Räkna ut större och mer komplicerade tal        418
  Oktala talsystemet                                  418
      Till och från binärt                            419
      Oktalt till decimalt                            420

Källor                                                423