Chapter 1. Introduction
1.1 Introduction
1.2 Logging In
1.3 Files and Directories
1.4 Input and Output
1.5 Programs and Processes
1.6 ANSI C Features
1.7 Error Handling
1.8 User Identification
1.9 Signals
1.10 Unix Time Values
1.11 System Calls and Library Functions
1.12 Summary
Chapter 2. Unix Standardization and Implementations
2.1 Introduction
2.2 Unix Standardization
2.3 Unix Implementations
2.4 Relationship of Standards and Implementations
2.5 Limits
2.6 Feature Test Macros
2.7 Primitive System Data Types
2.8 Conflicts Between Standards
2.9 Summary
Chapter 3. FiIe I/O
3.1 Introduction
3.2 File Descriptors
3.3 open Function
3.4 creat Function
3.5 close Function
3.6 lseek Function
3.7 read Function
3.8 write Function
3.9 I/O Efficiency
3.10 File Sharing
3.11 Atomic Operations
3.12 dup and dup2 Functions
3.13 fcntl Function
3.14 ioctl Function
3.15 /dev/fd
3.16 Summary
Chapter 4. Files and Directories
4.1 Introduction
4.2 stat, fstat, and lstat Functions
4.3 File Types
4.4 Set-User-ID and Set-Group-lD
4.5 File Access Permissions
4.6 Ownership of New Files and Directories
4.7 access Function
4.8 umask Function
4.9 chmod and fchmod Functions
4.10 Sticky Bit 88
4.11 chown, fchown, and lchown Functions
4.12 File Size
4.13 File Truncation
4.14 Fijesystems
4.15 link, unlink, remove, and rename Functions
4.16 Symbolic Links
4.17 symlink and readlink Functions
4.18 File Times
4.19 utime Function
4.20 mkdir and rmdir Functions
4.21 Reading Directories
4.22 chdir, fchdir, and getcwd Functions
4.23 Special Device Files
4.24 sync and fsync Functions
4.25 Summary of File Access Permission Bits
4.26 Summary
Chapter 5. Standard I/O Library
5.1 Introduction
5.2 Streams and FILE Objects
5.3 Standard Input, Standard Output, and Standard Error
5.4 Buffering
5.5 Opening a Stream
5.6 Reading and Writing a Stream
5.7 Line-at-a-Time I/O
5.8 Standard I/O Efficiency
5.9 Binary I/O
5.10 Posltioning a Stream
5.11 Formatted I/O
5.12 Implementation Details
5.13 Temporary Files
5.14 Alternatives to Standard I/O
5.15 Summary
Chapter 6. System Data Files and Information
6.1 Introduction
6.2 Password File
6.3 Shadow Passwords
6.4 Group File
6.5 Supplementary Group IDs
6.6 Other Data Files
6.7 Login Accounting
6.8 System Identification
6.9 Time and Date Routines
6.10 Summary
Chapter 7. The Environment of a Unix Process
7.1 Introduction
7.2 main Function
7.3 Process Termination
7.4 Command-Line Arguments
7.5 Environment List
7.6 Memory Layout of a C Program
7.7 Shared Libraries
7.8 Memory Allocation
7.9 Environment Variables
7.10 set jmp and ionqjmp Functions
7.11 qetrlimit and setrlimit Functions
7.12 Summary
Chapter 8. Process Control
8.1 Introduction
8.2 Process Identifiers
8.3 fork Function
8.4 vfork Function
8.5 exit Functions
8.6 wait and waitpid Functions
8.7 wait3 and wait4 Functions
8.8 Race Conditions
8.9 exec Functions
8.10 Changing User IDs and Group IDs
8.11 Interpreter Files
8.12 system Function
8.13 Process Accounting
8.14 User Identification
8.15 Process Times
8.16 Summary
Chapter 9. Process Relationships
9.1 Introduction
9.2 Terminal Logins
9.3 Network Logins
9.4 Process Groups
9.5 Sessions
9.6 Controlling Terminal
9.7 tcgetpqrp and tcsetpgrp Functions
9.8 Job Control
9.9 Shell Execution of Programs
9.10 Orphaned Process Groups
9.11 4.3+BSD Implementation
9.12 Summary
Chapter 10. Signals
10.1 Introduction
10.2 Signal Concepts
10.3 signal Function
10.4 Unreliable Signals
10.5 Interrupted System Calls
10.6 Reentrant Functions
10.7 SIGCLD Semantics
10.8 Reliable Signal Terminology and Semantics
10.9 kill and ra1se Functions
10.10 alarm and pause Functions
10.11 Signal Sets
10.12 siqprocmask Function
10.13 siqpending Function
10.14 sigaction Function
10.15 sigsetjmp and siglongjmp Functions
10.16 siqsuspend Function
10.17 abort Function
10.18 system Function
10.19 sleep Function
10.20 Job-Control Signals
10.21 Addltional Features
10.22 Summary
Chapter 11. Terminal I/O
11.1 Introduction
11.2 Overview
11.3 Special Input Characters
11.4 Getting and Setting Terminal Attributes
11.5 Terminal Option Flags
11.6 stty Command
11.7 Baud Rate Functions
11.8 Line Control Functions
11.9 Terminal Identification
11.10 Canonical Mode
11.11 Noncanonical Mode
11.12 Terminal Window Size
11.13 termcap, terminfo. and curses
11.14 Summary
Chapter 12. Advanced I/O
12.1 Introduction
12.2 Nonblocking I/O
12.3 Record Locking
12.4 Streams
12 5 I/O Multiplexing
12.6 Asynchronous I/O
12.7 readv and writev Functions
12.8 readn and writen Functions
12.9 Memory Mapped I/O
12.10 Summary
Chapter 13. Daemon Processes
13.1 Introduction
13.2 Daemon Characteristics
13.3 Coding Rules
13.4 Error Loggjng
13.5 Client-Server Model
13.6 Summary
Chapter 14. Interprocess Communication
14.1 Introduction
14.2 Pipes
14.3 popen and pciose Functions
14.4 Coprocesses
14.5 FIFOs
14.6 System V IPC
14.7 Message Queues
14.8 Semaphores
14.9 Shared Memory
14.10 Client-Server Properties
14.11 Summary
Chapter 15. Advanced Interprocess Communication
15.1 Introduction
15.2 Stream Pipes
15.3 Passing File Descriptors
15.4 An Open Server, Version 1
15.5 Client--Server Connection Functions
15.6 An Open Server, Version 2
15.7 Summary
Chapter 16. A Database Library
16.1 Introduction
16.2 History
16.3 The Library
16.4 Implementation Overview
16.5 Centralized or Decentralized?
16.6 Concurrency
16.7 Source Code
16.8 Performance
16.9 Summary
Chapter 17. Communicating with a PostScript Printer
17.1 Introduction
17.2 PostScript Communication Dynamics
17.3 Printer Spooling
17.4 Source Code
17.5 Summary
Chapter 18. A Modem Dialer
18.1 Introduction
18.2 History
18.3 Program Design
18.4 Data Files
18.5 Server Design
18.6 Server Source Code
18.7 Client Design
18.8 Client Source Code
18.9 Summary
Chapter 19. Pseudo Terminals
19.1 Introduction
19.2 Overview
19.3 Opening Pseudo-Terminal Devices
19.4 pty_fork Function
19.5 pty Program
19.6 Using the pty Program
19.7 Advanced Features
19.8 Summary
Appendix A. Function Prototypes
Appendix B. Miscellaneous Source Code
B.1 Our Header File
B.2 Standard Error Routines
Appendix C. Solutions to Selected Exercises
Bibliography
Index