Chapter 1. UNIX System Overview 1
         1.1      Introduction    1
         1.2      UNIX Architecture    1
         1.3      Logging In    2
         1.4      Files and Directories    4
         1.5      Input and Output    8
         1.6      Programs and Processes    10
         1.7      Error Handling    14
         1.8      User Identification    16
         1.9      Signals    18
         1.10     Time Values    20
         1.11     System Calls and Library Functions    21
         1.12     Summary    23
         Chapter 2. UNIX Standardization and Implementations 25
         2.1      Introduction    25
         2.2      UNIX Standardization    25
         2.2.1  ISO C   25
         2.2.2  IEEE POSIX    26
         2.2.3  The Single UNIX Specification    29
         2.2.4  FIPS   33
         2.3      UNIX System Implementations    33
         2.3.1  UNIX System V Release 4    33
         2.3.2  4.4BSD    34
         2.3.3  FreeBSD    35
         2.3.4  Linux    35
         2.3.5  Mac OS X    35
         2.3.6  Solaris    35
         2.3.7  Other UNIX Systems    36
         2.4      Relationship of Standards and Implementations    36
         2.5      Limits    36
         2.5.1  ISO C Limits   38
         2.5.2  POSlX Limits   38
         2.5.3  XSl Limits   40
         2.5.4        sysconf, pathconf, and fpathconf Functions    41
         2.5.5  Indeterminate Runtime Limits    48
         2.6      Options    52
         2.7      Feature Test Macros    55
         2.8      Primitive System Data Types    56
         2.9      Conflicts Between Standards    56
         2.10     Summary    58
         Chapter 3. File I/0 59
         3.1      Introduction    59
         3.2      File Descriptors    59
         3.3      open Function    60
         3.4      creat Function    62
         3.5      close Function    63
         3.6      1 seek Function    63
         3.7      read Function    67
         3.8      write Function    68
         3.9      I/O Efficiency    68
         3.10     File Sharing    70
         3.11     Atomic Operations    74
         3.12     dup and dup2 Functions    76
         3.13     sync, fsync, and fdatasync Functions    77
         3.14     fcnt 1 Function    78
         3.15     ioct 1 Function    83
         3.16     /dev/fd    84
         3.17     Summary    85
         Chapter 4. Files and Directories 87
         4.1      Introduction    87
         4.2      stat, fstat, and lstat Functions    87
         4.3      File Types    88
         4.4      Set-User-ID and Set-Group-ID    91
         4.5      File Access Permissions    92
         4.6     Ownership of New Files and Directories   95
         4.7      access Function    95
         4.8      umask Function    97
         4.9      chmod and f chmod Functions    99
         4.10           Sticky  Bit         101
         4.11     chown, fchown, and lchown Functions    102
         4.12     File Size    103
         4.13    File Truncation    105
         4.14     File Systems    105
         4.15     link, unlink, remove, and rename Functions    108
         4.16    Symbolic Links    112
         4.17     syml ink and readlink Functions    115
         4.18     File Times    115
         4.19     ut ime Function    116
         4.20     mkdir and rmdir Functions    119
         4.21     Reading Directories    120
         4.22     chdir, fchdir, and getcwd Functions    125
         4.23     Device Special Files    127
         4.24    Summary of File Access Permission Bits    130
         4.25     Summary    130
         Chapter 5. Standard I/O Library 133
         5.1      Introduction    133
         5.2      Streams and FILE Objects    133
         5.3      Standard Input, Standard Output, and Standard Error    135
         5.4      Buffering    135
         5.5      Opening a Stream    138
         5.6     Reading and Writing a Stream    140
         5.7     Line-at-a-Time I/O    142
         5.8     Standard I/O Efficiency    143
         5.9      Binary I/O    145
         5.10     Positioning a Stream    147
         5.11     Formatted I/O    149
         5.12     Implementation Details    153
         5.13     Temporary Files    155
         5.14     Alternatives to Standard I/O    159
         5.15     Summary    159
         Chapter 6. System Data Files and Information 161
         6.1      Introduction    161
         6.2      Password File    161
         6.3      Shadow Passwords    165
         6.4      Group File    166
         6.5      Supplementary Group IDs    167
         6.6      Implementation Differences    169
         6.7      Other Data Files    169
         6.8      Login Accounting    170
         6.9      System Identification    171
         6.10     Time and Date Routines    173
         6.11     Summary    177
         Chapter 7. Process Environment 179
         7.1      Introduction    179
         7.2      main Function    179
         7.3      Process Termination    180
         7.4      Command-Line Arguments    185
         7.5      Environment List    185
         7.6      Memory Layout of a C Program    186
         7.7      Shared Libraries    188
         7.8      Memory Allocation    189
         7.9      Environment Variables    192
         7.10     set j mp and longj mp Functions    195
         7.11     getrlimit and setrlimit Functions    202
         7.12     Summary    206
         Chapter 8. Process Control 209
         8.1      Introduction    209
         8.2      Process Identifiers    209
         8.3      fork Function    211
         8.4      vfork Function    216
         8.5      exit Functions    218
         8.6      wait and waitpid Functions    220
         8.7      waitid Function    226
         8.8      wait3 and wait4 Functions    227
         8.9      Race Conditions    227
         8.10     exec Functions    231
         8.11     Changing User IDs and Group IDs    237
         8.12     Interpreter Files    242
         8.13     system Function    246
         8.14     Process Accounting    250
         8.15     User Identification    256
         8.16     Process Times    257
         8.17     Summary   259
         Chapter 9. Process Relationships 261
         9.1      Introduction    261
         9.2      Terminal Logins    261
         9.3      Network Logins    266
         9.4      Process Groups    269
         9.5      Sessions    270
         9.6      Controlling Terminal    272
         9.7      tcgetpgrp, tcsetpgrp, and tcgetsid Functions    273
         9.8      Job Control    274
         9.9      Shell Execution of Programs    278
         9.10     Orphaned Process Groups    282
         9.11     FreeBSD Implementation    285
         9.12     Summary    287
         Chapter 10. Signals 289
         10.1     Introduction    289
         10.2     Signal Concepts    289
         10.3     signal Function    298
         10.4     Unreliable Signals    301
         10.5     Interrupted System Calls    303
         10.6     Reentrant Functions    305
         10.7     s IGCLD Semantics   308
         10.8     Reliable-Signal Terminology and Semantics    310
         10.9     kill and raise Functions    311
         10.10    alarm and pause Functions    313
         10.11    Signal Sets    318
         10.12    sigprocmask Function    320
         10.13    s igpending Function    322
         10.14    sigaction Function    324
         10.15    sigsetjmp and siglongjmp Functions    329
         10.16    s igsuspend Function    333
         10.17    abort Function    340
         10.18    sys t em Function    342
         10.19    s I eep Function    347
         10.20   Job-Control Signals   349
         10.21    Additional Features    352
         10.22    Summary   353
         Chapter 11. Threads 355
         11.1     Introduction    355
         11.2     Thread Concepts    355
         11.3    Thread Identification   356
         11.4     Thread Creation    357
         11.5     Thread Termination    360
         11.6     Thread Synchronization    368
         11.7     Summary   385
         Chapter 12. Thread Control 387
         12.1     Introduction    387
         12.2    Thread Limits   387
         12.3    Thread Attributes   388
         12.4     Synchronization Attributes    393
         12.5     Reentrancy    401
         12.6     Thread-Specific Data    406
         12.7     Cancel Options   410
         12.8     Threads and Signals   413
         12.9     Threads and fork    416
         12.10    Threads and I/O   420
         12.11    Summary    420
         Chapter 13. Daemon Processes 423
         13.1     Introduction    423
         13.2     Daemon Characteristics   423
         13.3     Coding Rules    425
         13.4     Error Logging    428
         13.5     Single-Instance Daemons    432
         13.6     Daemon Conventions   434
         13.7     Client-Server Model    439
         13.8     Summary    439
         Chapter 14. Advanced I/O 441
         14.1     Introduction    441
         14.2     Nonblocking I/O    441
         14.3     Record Locking    444
         14.4     STREAMS    460
         14.5     I/O Multiplexing    472
         14.5.1       select and pselect Functions    474
         14.5.2      pol 1 Function    479
         14.6    Asynchronous I/O   481
         14.6.1       System V Asynchronous I/O    481
         14.6.2      BSD Asynchronous I/O    482
         14.7     readv and writev Functions    483
         14.8     readn and writen Functions    485
         14.9     Memory-Mapped I/O    487
         14.10    Summary    492
         Chapter 15. Interprocess Communication 495
         15.1     Introduction   495
         15.2     Pipes    496
         15.3     popen and pclose Functions    503
         15.4     Cop rocesses    510
         15.5     FIFOs   514
         15.6    XSI IPC    518
         15.6.1      Identifiers and Keys   518
         15.6.2      Permission Structure    520
         15.6.3      Configuration Limits    521
         15.6.4      Advantages and Disadvantages   521
         15.7    Message Queues   522
         15.8    Semaphores   527
         15.9     Shared Memory    533
         15.10    Client-Server Properties    541
         15.11    Summary    543
         Chapter 16. Network IPC: Sockets 545
         16.1     Introduction    545
         16.2     Socket Descriptors   546
         16.3     Addressing    549
         16.3.1       Byte Ordering    549
         16.3.2      Address Formats    551
         16.3.3      Address Lookup   553
         16.3.4      Associating Addresses with Sockets    560
         16.4     Connection Establishment    561
         16.5     Data Transfer    565
         16.6     Socket Options    579
         16.7     Out-of-Band Data    581
         16.8     Nonblocking and Asynchronous I/O    582
         16.9     Summary    583
         Chapter 17. Advanced IPC 585
         17.1     Introduction    585
         17.2     STREAMS-Based Pipes    585
         17.2.1       Naming STREAMS Pipes    589
         17.2.2      Unique Connections    590
         17.3     UNIX Domain Sockets    594
         17.3.1       Naming UNIX Domain Sockets    595
         17.3.2      Unique Connections    597
         17.4     Passing File Descriptors    601
         17.4.1      Passing File Descriptors over STREAMS-Based Pipes   604
         17.4.2      Passing File Descriptors over UNIX Domain Sockets    606
         17.5     An Open Server, Version 1    615
         17.6     An Open Server, Version 2    620
         17.7     Summary    629
         Chapter 18. Terminal I/O 631
         18.1     Introduction    631
         18.2     Overview    631
         18.3     Special Input Characters    638
         18.4     Getting and Setting Terminal Attributes    643
         18.5     Terminal Option Flags    643
         18.6     stty Command    651
         18.7     Baud Rate Functions    652
         18.8     Line Control Functions    653
         18.9     Terminal Identification    654
         18.10    Canonical Mode    660
         18.11    Noncanonical Mode    663
         18.12    Terminal Window Size    670
         18.13     termcap, terminfo, and curses    672
         18.14    Summary    673
         Chapter 19. Pseudo Terminals 675
         19.1     Introduction    675
         19.2     Overview    675
         19.3     Opening Pseudo-Terminal Devices    681
         19.3.1       STREAMS-Based Pseudo Terminals    683
         19.3.2      BSD-Based Pseudo Terminals    686
         19.3.3      Linux-Based Pseudo Terminals    689
         19.4     pty fork Function    691
         19.5    pty Program   694
         19.6     Using the pty Program    698
         19.7     Advanced Features    705
         19.8     Summary    706
         Chapter 20. A Database Library 709
         20.1     Introduction    709
         20.2     History    709
         20.3     The Library    710
         20.4     Implementation Overview    712
         20.5     Centralized or Decentralized?    716
         20.6     Concurrency    718
         20.7     Building the Library    719
         20.8     Source Code    719
         20.9     Performance    747
         20.10    Summary    752
         Chapter 21. Communicating with a Network Printer 753
         21.1     Introduction    753
         21.2     The Internet Printing Protocol    753
         21.3     The Hypertext Transfer Protocol    756
         21.4     Printer Spooling    757
         21.5     Source Code    758
         21.6     Summary    805
         Appendix A. Function Prototypes 807
         Appendix B. Miscellaneous Source Code 843
         B.1      Our Header File    843
         B.2      Standard Error Routines    846
         Appendix C. Solutions to Selected Exercises 853
         Bibliography 885
         Index 891
      · · · · · ·     (
收起)