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