| |  | Copyright |
| |  | Praise for Advanced Programming in the UNIX® Environment, Second Edition |
| |  | Praise for the First Edition |
| |  | Addison-Wesley Professional Computing Series |
| |  | Foreword |
| |  | Preface |
| |
|  | Introduction |
| |
|  | Changes from the First Edition |
| |
|  | Acknowledgments |
| |  | Preface to the First Edition |
| |
|  | Introduction |
| |
|  | Unix Standards |
| |
|  | Organization of the Book |
| |
|  | Examples in the Text |
| |
|  | Systems Used to Test the Examples |
| |
|  | Acknowledgments |
| |  |
Chapter 1.
UNIX System Overview |
| |
|  |
Section 1.1.
Introduction |
| |
|  |
Section 1.2.
UNIX Architecture |
| |
|  |
Section 1.3.
Logging In |
| |
|  |
Section 1.4.
Files and Directories |
| |
|  |
Section 1.5.
Input and Output |
| |
|  |
Section 1.6.
Programs and Processes |
| |
|  |
Section 1.7.
Error Handling |
| |
|  |
Section 1.8.
User Identification |
| |
|  |
Section 1.9.
Signals |
| |
|  |
Section 1.10.
Time Values |
| |
|  |
Section 1.11.
System Calls and Library Functions |
| |
|  |
Section 1.12.
Summary |
| |
|  | Exercises |
| |  |
Chapter 2.
UNIX Standardization and Implementations |
| |
|  |
Section 2.1.
Introduction |
| |
|  |
Section 2.2.
UNIX Standardization |
| |
|  |
Section 2.3.
UNIX System Implementations |
| |
|  |
Section 2.4.
Relationship of Standards and Implementations |
| |
|  |
Section 2.5.
Limits |
| |
|  |
Section 2.6.
Options |
| |
|  |
Section 2.7.
Feature Test Macros |
| |
|  |
Section 2.8.
Primitive System Data Types |
| |
|  |
Section 2.9.
Conflicts Between Standards |
| |
|  |
Section 2.10.
Summary |
| |
|  | Exercises |
| |  |
Chapter 3.
File I/O |
| |
|  |
Section 3.1.
Introduction |
| |
|  |
Section 3.2.
File Descriptors |
| |
|  |
Section 3.3.
open Function |
| |
|  |
Section 3.4.
creat Function |
| |
|  |
Section 3.5.
close Function |
| |
|  |
Section 3.6.
lseek Function |
| |
|  |
Section 3.7.
read Function |
| |
|  |
Section 3.8.
write Function |
| |
|  |
Section 3.9.
I/O Efficiency |
| |
|  |
Section 3.10.
File Sharing |
| |
|  |
Section 3.11.
Atomic Operations |
| |
|  |
Section 3.12.
dup and dup2 Functions |
| |
|  |
Section 3.13.
sync, fsync, and fdatasync Functions |
| |
|  |
Section 3.14.
fcntl Function |
| |
|  |
Section 3.15.
ioctl Function |
| |
|  |
Section 3.16.
/dev/fd |
| |
|  |
Section 3.17.
Summary |
| |
|  | Exercises |
| |  |
Chapter 4.
Files and Directories |
| |
|  |
Section 4.1.
Introduction |
| |
|  |
Section 4.2.
stat, fstat, and lstat Functions |
| |
|  |
Section 4.3.
File Types |
| |
|  |
Section 4.4.
Set-User-ID and Set-Group-ID |
| |
|  |
Section 4.5.
File Access Permissions |
| |
|  |
Section 4.6.
Ownership of New Files and Directories |
| |
|  |
Section 4.7.
access Function |
| |
|  |
Section 4.8.
umask Function |
| |
|  |
Section 4.9.
chmod and fchmod Functions |
| |
|  |
Section 4.10.
Sticky Bit |
| |
|  |
Section 4.11.
chown, fchown, and lchown Functions |
| |
|  |
Section 4.12.
File Size |
| |
|  |
Section 4.13.
File Truncation |
| |
|  |
Section 4.14.
File Systems |
| |
|  |
Section 4.15.
link, unlink, remove, and rename Functions |
| |
|  |
Section 4.16.
Symbolic Links |
| |
|  |
Section 4.17.
symlink and readlink Functions |
| |
|  |
Section 4.18.
File Times |
| |
|  |
Section 4.19.
utime Function |
| |
|  |
Section 4.20.
mkdir and rmdir Functions |
| |
|  |
Section 4.21.
Reading Directories |
| |
|  |
Section 4.22.
chdir, fchdir, and getcwd Functions |
| |
|  |
Section 4.23.
Device Special Files |
| |
|  |
Section 4.24.
Summary of File Access Permission Bits |
| |
|  |
Section 4.25.
Summary |
| |
|  | Exercises |
| |  |
Chapter 5.
Standard I/O Library |
| |
|  |
Section 5.1.
Introduction |
| |
|  |
Section 5.2.
Streams and FILE Objects |
| |
|  |
Section 5.3.
Standard Input, Standard Output, and Standard Error |
| |
|  |
Section 5.4.
Buffering |
| |
|  |
Section 5.5.
Opening a Stream |
| |
|  |
Section 5.6.
Reading and Writing a Stream |
| |
|  |
Section 5.7.
Line-at-a-Time I/O |
| |
|  |
Section 5.8.
Standard I/O Efficiency |
| |
|  |
Section 5.9.
Binary I/O |
| |
|  |
Section 5.10.
Positioning a Stream |
| |
|  |
Section 5.11.
Formatted I/O |
| |
|  |
Section 5.12.
Implementation Details |
| |
|  |
Section 5.13.
Temporary Files |
| |
|  |
Section 5.14.
Alternatives to Standard I/O |
| |
|  |
Section 5.15.
Summary |
| |
|  | Exercises |
| |  |
Chapter 6.
System Data Files and Information |
| |
|  |
Section 6.1.
Introduction |
| |
|  |
Section 6.2.
Password File |
| |
|  |
Section 6.3.
Shadow Passwords |
| |
|  |
Section 6.4.
Group File |
| |
|  |
Section 6.5.
Supplementary Group IDs |
| |
|  |
Section 6.6.
Implementation Differences |
| |
|  |
Section 6.7.
Other Data Files |
| |
|  |
Section 6.8.
Login Accounting |
| |
|  |
Section 6.9.
System Identification |
| |
|  |
Section 6.10.
Time and Date Routines |
| |
|  |
Section 6.11.
Summary |
| |
|  | Exercises |
| |  |
Chapter 7.
Process Environment |
| |
|  |
Section 7.1.
Introduction |
| |
|  |
Section 7.2.
main Function |
| |
|  |
Section 7.3.
Process Termination |
| |
|  |
Section 7.4.
Command-Line Arguments |
| |
|  |
Section 7.5.
Environment List |
| |
|  |
Section 7.6.
Memory Layout of a C Program |
| |
|  |
Section 7.7.
Shared Libraries |
| |
|  |
Section 7.8.
Memory Allocation |
| |
|  |
Section 7.9.
Environment Variables |
| |
|  |
Section 7.10.
setjmp and longjmp Functions |
| |
|  |
Section 7.11.
getrlimit and setrlimit Functions |
| |
|  |
Section 7.12.
Summary |
| |
|  | Exercises |
| |  |
Chapter 8.
Process Control |
| |
|  |
Section 8.1.
Introduction |
| |
|  |
Section 8.2.
Process Identifiers |
| |
|  |
Section 8.3.
fork Function |
| |
|  |
Section 8.4.
vfork Function |
| |
|  |
Section 8.5.
exit Functions |
| |
|  |
Section 8.6.
wait and waitpid Functions |
| |
|  |
Section 8.7.
waitid Function |
| |
|  |
Section 8.8.
wait3 and wait4 Functions |
| |
|  |
Section 8.9.
Race Conditions |
| |
|  |
Section 8.10.
exec Functions |
| |
|  |
Section 8.11.
Changing User IDs and Group IDs |
| |
|  |
Section 8.12.
Interpreter Files |
| |
|  |
Section 8.13.
system Function |
| |
|  |
Section 8.14.
Process Accounting |
| |
|  |
Section 8.15.
User Identification |
| |
|  |
Section 8.16.
Process Times |
| |
|  |
Section 8.17.
Summary |
| |
|  | Exercises |
| |  |
Chapter 9.
Process Relationships |
| |
|  |
Section 9.1.
Introduction |
| |
|  |
Section 9.2.
Terminal Logins |
| |
|  |
Section 9.3.
Network Logins |
| |
|  |
Section 9.4.
Process Groups |
| |
|  |
Section 9.5.
Sessions |
| |
|  |
Section 9.6.
Controlling Terminal |
| |
|  |
Section 9.7.
tcgetpgrp, tcsetpgrp, and tcgetsid Functions |
| |
|  |
Section 9.8.
Job Control |
| |
|  |
Section 9.9.
Shell Execution of Programs |
| |
|  |
Section 9.10.
Orphaned Process Groups |
| |
|  |
Section 9.11.
FreeBSD Implementation |
| |
|  |
Section 9.12.
Summary |
| |
|  | Exercises |
| |  |
Chapter 10.
Signals |
| |
|  |
Section 10.1.
Introduction |
| |
|  |
Section 10.2.
Signal Concepts |
| |
|  |
Section 10.3.
signal Function |
| |
|  |
Section 10.4.
Unreliable Signals |
| |
|  |
Section 10.5.
Interrupted System Calls |
| |
|  |
Section 10.6.
Reentrant Functions |
| |
|  |
Section 10.7.
SIGCLD Semantics |
| |
|  |
Section 10.8.
Reliable-Signal Terminology and Semantics |
| |
|  |
Section 10.9.
kill and raise Functions |
| |
|  |
Section 10.10.
alarm and pause Functions |
| |
|  |
Section 10.11.
Signal Sets |
| |
|  |
Section 10.12.
sigprocmask Function |
| |
|  |
Section 10.13.
sigpending Function |
| |
|  |
Section 10.14.
sigaction Function |
| |
|  |
Section 10.15.
sigsetjmp and siglongjmp Functions |
| |
|  |
Section 10.16.
sigsuspend Function |
| |
|  |
Section 10.17.
abort Function |
| |
|  |
Section 10.18.
system Function |
| |
|  |
Section 10.19.
sleep Function |
| |
|  |
Section 10.20.
Job-Control Signals |
| |
|  |
Section 10.21.
Additional Features |
| |
|  |
Section 10.22.
Summary |
| |
|  | Exercises |
| |  |
Chapter 11.
Threads |
| |
|  |
Section 11.1.
Introduction |
| |
|  |
Section 11.2.
Thread Concepts |
| |
|  |
Section 11.3.
Thread Identification |
| |
|  |
Section 11.4.
Thread Creation |
| |
|  |
Section 11.5.
Thread Termination |
| |
|  |
Section 11.6.
Thread Synchronization |
| |
|  |
Section 11.7.
Summary |
| |
|  | Exercises |
| |  |
Chapter 12.
Thread Control |
| |
|  |
Section 12.1.
Introduction |
| |
|  |
Section 12.2.
Thread Limits |
| |
|  |
Section 12.3.
Thread Attributes |
| |
|  |
Section 12.4.
Synchronization Attributes |
| |
|  |
Section 12.5.
Reentrancy |
| |
|  |
Section 12.6.
Thread-Specific Data |
| |
|  |
Section 12.7.
Cancel Options |
| |
|  |
Section 12.8.
Threads and Signals |
| |
|  |
Section 12.9.
Threads and fork |
| |
|  |
Section 12.10.
Threads and I/O |
| |
|  |
Section 12.11.
Summary |
| |
|  | Exercises |
| |  |
Chapter 13.
Daemon Processes |
| |
|  |
Section 13.1.
Introduction |
| |
|  |
Section 13.2.
Daemon Characteristics |
| |
|  |
Section 13.3.
Coding Rules |
| |
|  |
Section 13.4.
Error Logging |
| |
|  |
Section 13.5.
Single-Instance Daemons |
| |
|  |
Section 13.6.
Daemon Conventions |
| |
|  |
Section 13.7.
ClientServer Model |
| |
|  |
Section 13.8.
Summary |
| |
|  | Exercises |
| |  |
Chapter 14.
Advanced I/O |
| |
|  |
Section 14.1.
Introduction |
| |
|  |
Section 14.2.
Nonblocking I/O |
| |
|  |
Section 14.3.
Record Locking |
| |
|  |
Section 14.4.
STREAMS |
| |
|  |
Section 14.5.
I/O Multiplexing |
| |
|  |
Section 14.6.
Asynchronous I/O |
| |
|  |
Section 14.7.
readv and writev Functions |
| |
|  |
Section 14.8.
readn and writen Functions |
| |
|  |
Section 14.9.
Memory-Mapped I/O |
| |
|  |
Section 14.10.
Summary |
| |
|  | Exercises |
| |  |
Chapter 15.
Interprocess Communication |
| |
|  |
Section 15.1.
Introduction |
| |
|  |
Section 15.2.
Pipes |
| |
|  |
Section 15.3.
popen and pclose Functions |
| |
|  |
Section 15.4.
Coprocesses |
| |
|  |
Section 15.5.
FIFOs |
| |
|  |
Section 15.6.
XSI IPC |
| |
|  |
Section 15.7.
Message Queues |
| |
|  |
Section 15.8.
Semaphores |
| |
|  |
Section 15.9.
Shared Memory |
| |
|  |
Section 15.10.
ClientServer Properties |
| |
|  |
Section 15.11.
Summary |
| |
|  | Exercises |
| |  |
Chapter 16.
Network IPC: Sockets |
| |
|  |
Section 16.1.
Introduction |
| |
|  |
Section 16.2.
Socket Descriptors |
| |
|  |
Section 16.3.
Addressing |
| |
|  |
Section 16.4.
Connection Establishment |
| |
|  |
Section 16.5.
Data Transfer |
| |
|  |
Section 16.6.
Socket Options |
| |
|  |
Section 16.7.
Out-of-Band Data |
| |
|  |
Section 16.8.
Nonblocking and Asynchronous I/O |
| |
|  |
Section 16.9.
Summary |
| |
|  | Exercises |
| |  |
Chapter 17.
Advanced IPC |
| |
|  |
Section 17.1.
Introduction |
| |
|  |
Section 17.2.
STREAMS-Based Pipes |
| |
|  |
Section 17.3.
UNIX Domain Sockets |
| |
|  |
Section 17.4.
Passing File Descriptors |
| |
|  |
Section 17.5.
An Open Server, Version 1 |
| |
|  |
Section 17.6.
An Open Server, Version 2 |
| |
|  |
Section 17.7.
Summary |
| |
|  | Exercises |
| |  |
Chapter 18.
Terminal I/O |
| |
|  |
Section 18.1.
Introduction |
| |
|  |
Section 18.2.
Overview |
| |
|  |
Section 18.3.
Special Input Characters |
| |
|  |
Section 18.4.
Getting and Setting Terminal Attributes |
| |
|  |
Section 18.5.
Terminal Option Flags |
| |
|  |
Section 18.6.
stty Command |
| |
|  |
Section 18.7.
Baud Rate Functions |
| |
|  |
Section 18.8.
Line Control Functions |
| |
|  |
Section 18.9.
Terminal Identification |
| |
|  |
Section 18.10.
Canonical Mode |
| |
|  |
Section 18.11.
Noncanonical Mode |
| |
|  |
Section 18.12.
Terminal Window Size |
| |
|  |
Section 18.13.
termcap, terminfo, and curses |
| |
|  |
Section 18.14.
Summary |
| |
|  | Exercises |
| |  |
Chapter 19.
Pseudo Terminals |
| |
|  |
Section 19.1.
Introduction |
| |
|  |
Section 19.2.
Overview |
| |
|  |
Section 19.3.
Opening Pseudo-Terminal Devices |
| |
|  |
Section 19.4.
pty_fork Function |
| |
|  |
Section 19.5.
pty Program |
| |
|  |
Section 19.6.
Using the pty Program |
| |
|  |
Section 19.7.
Advanced Features |
| |
|  |
Section 19.8.
Summary |
| |
|  | Exercises |
| |  |
Chapter 20.
A Database Library |
| |
|  |
Section 20.1.
Introduction |
| |
|  |
Section 20.2.
History |
| |
|  |
Section 20.3.
The Library |
| |
|  |
Section 20.4.
Implementation Overview |
| |
|  |
Section 20.5.
Centralized or Decentralized? |
| |
|  |
Section 20.6.
Concurrency |
| |
|  |
Section 20.7.
Building the Library |
| |
|  |
Section 20.8.
Source Code |
| |
|  |
Section 20.9.
Performance |
| |
|  |
Section 20.10.
Summary |
| |
|  | Exercises |
| |  |
Chapter 21.
Communicating with a Network Printer |
| |
|  |
Section 21.1.
Introduction |
| |
|  |
Section 21.2.
The Internet Printing Protocol |
| |
|  |
Section 21.3.
The Hypertext Transfer Protocol |
| |
|  |
Section 21.4.
Printer Spooling |
| |
|  |
Section 21.5.
Source Code |
| |
|  |
Section 21.6.
Summary |
| |
|  | Exercises |
| |  |
Appendix A.
Function Prototypes |
| |  |
Appendix B.
Miscellaneous Source Code |
| |
|  |
Section B.1.
Our Header File |
| |
|  | B.2 Standard Error Routines |
| |  |
Appendix C.
Solutions to Selected Exercises |
| |
|  | Chapter 1 |
| |
|  | Chapter 2 |
| |
|  | Chapter 3 |
| |
|  | Chapter 4 |
| |
|  | Chapter 5 |
| |
|  | Chapter 6 |
| |
|  | Chapter 7 |
| |
|  | Chapter 8 |
| |
|  | Chapter 9 |
| |
|  | Chapter 10 |
| |
|  | Chapter 11 |
| |
|  | Chapter 12 |
| |
|  | Chapter 13 |
| |
|  | Chapter 14 |
| |
|  | Chapter 15 |
| |
|  | Chapter 16 |
| |
|  | Chapter 17 |
| |
|  | Chapter 18 |
| |
|  | Chapter 19 |
| |
|  | Chapter 20 |
| |
|  | Chapter 21 |
| |  | Bibliography |
| |  | Index |