UNIX Systems Programming by Robbins & Robbins
Total Page:16
File Type:pdf, Size:1020Kb
• Table of Contents Unix™ Systems Programming: Communication, Concurrency, and Threads By Kay A. Robbins, Steven Robbins Publisher: Prentice Hall PTR Pub Date: June 17, 2003 ISBN: 0-13-042411-0 Pages: 912 This completely updated classic (originally titled Practical UNIX Programming) demonstrates how to design complex software to get the most from the UNIX operating system. UNIX Systems Programming provides a clear and easy-to-understand introduction tothe essentials of UNIX programming. Starting with short code snippetsthat illustrate how to use system calls, Robbins and Robbins movequickly to hands-on projects that help readers expand their skill levels. This practical guide thoroughly explores communication, concurrency,and multithreading. Known for its comprehensive and lucid explanations of complicated topics such as signals and concurrency, the book features practical examples, exercises, reusable code, and simplified libraries for use in network communication applications. A self-contained reference that relies on the latest UNIX standards,UNIX Systems Programming provides thorough coverage of files, signals,semaphores, POSIX threads, and client-server communication. Thisedition features all-new chapters on the Web, UDP, and server performance. The sample material has been tested extensively in the classroom. • Table of Contents Unix™ Systems Programming: Communication, Concurrency, and Threads By Kay A. Robbins, Steven Robbins Publisher: Prentice Hall PTR Pub Date: June 17, 2003 ISBN: 0-13-042411-0 Pages: 912 Copyright About the Web Site Preface Acknowledgments Part I: Fundamentals Chapter 1. Technology's Impact on Programs Section 1.1. Terminology of Change Section 1.2. Time and Speed Section 1.3. Multiprogramming and Time Sharing Section 1.4. Concurrency at the Applications Level Section 1.5. Security and Fault Tolerance Section 1.6. Buffer Overflows for Breaking and Entering Section 1.7. UNIX Standards Section 1.8. Additional Reading Chapter 2. Programs, Processes and Threads Section 2.1. How a Program Becomes a Process Section 2.2. Threads and Thread of Execution Section 2.3. Layout of a Program Image Section 2.4. Library Function Calls Section 2.5. Function Return Values and Errors Section 2.6. Argument Arrays Section 2.7. Thread-Safe Functions Section 2.8. Use of Static Variables Section 2.9. Structure of Static Objects Section 2.10. Process Environment Section 2.11. Process Termination Section 2.12. Exercise: An env Utility Section 2.13. Exercise: Message Logging Section 2.14. Additional Reading Chapter 3. Processes in UNIX Section 3.1. Process Identification Section 3.2. Process State Section 3.3. UNIX Process Creation and fork Section 3.4. The wait Function Section 3.5. The exec Function Section 3.6. Background Processes and Daemons Section 3.7. Critical Sections Section 3.8. Exercise: Process Chains Section 3.9. Exercise: Process Fans Section 3.10. Additional Reading Chapter 4. UNIX I/O Section 4.1. Device Terminology Section 4.2. Reading and Writing Section 4.3. Opening and Closing Files Section 4.4. The select Function Section 4.5. The poll Function Section 4.6. File Representation Section 4.7. Filters and Redirection Section 4.8. File Control Section 4.9. Exercise: Atomic Logging Section 4.10. Exercise: A cat Utility Section 4.11. Additional Reading Chapter 5. Files and Directories Section 5.1. UNIX File System Navigation Section 5.2. Directory Access Section 5.3. UNIX File System Implementation Section 5.4. Hard Links and Symbolic Links Section 5.5. Exercise: The which Command Section 5.6. Exercise: Biffing Section 5.7. Exercise: News biff Section 5.8. Exercise: Traversing Directories Section 5.9. Additional Reading Chapter 6. UNIX Special Files Section 6.1. Pipes Section 6.2. Pipelines Section 6.3. FIFOs Section 6.4. Pipes and the Client-Server Model Section 6.5. Terminal Control Section 6.6. Audio Device Section 6.7. Exercise: Audio Section 6.8. Exercise: Barriers Section 6.9. Exercise: The stty Command Section 6.10. Exercise: Client-Server Revisited Section 6.11. Additional Reading Chapter 7. Project: The Token Ring Section 7.1. Ring Topology Section 7.2. Ring Formation Section 7.3. Ring Exploration Section 7.4. Simple Communication Section 7.5. Mutual Exclusion with Tokens Section 7.6. Mutual Exclusion by Voting Section 7.7. Leader Election on an Anonymous Ring Section 7.8. Token Ring for Communication Section 7.9. Pipelined Preprocessor Section 7.10. Parallel Ring Algorithms Section 7.11. Flexible Ring Section 7.12. Additional Reading Part II: Asynchronous Events Chapter 8. Signals Section 8.1. Basic Signal Concepts Section 8.2. Generating Signals Section 8.3. Manipulating Signal Masks and Signal Sets Section 8.4. Catching and Ignoring Signals—sigaction Section 8.5. Waiting for Signals—pause, sigsuspend and sigwait Section 8.6. Handling Signals: Errors and Async-signal Safety Section 8.7. Program Control with siglongjmp and sigsetjmp Section 8.8. Programming with Asynchronous I/O Section 8.9. Exercise: Dumping Statistics Section 8.10. Exercise: Spooling a Slow Device Section 8.11. Additional Reading Chapter 9. Times and Timers Section 9.1. POSIX Times Section 9.2. Sleep Functions Section 9.3. POSIX:XSI Interval Timers Section 9.4. Realtime Signals Section 9.5. POSIX:TMR Interval Timers Section 9.6. Timer Drift, Overruns and Absolute Time Section 9.7. Additional Reading Chapter 10. Project: Virtual Timers Section 10.1. Project Overview Section 10.2. Simple Timers Section 10.3. Setting One of Five Single Timers Section 10.4. Using Multiple Timers Section 10.5. A Robust Implementation of Multiple Timers Section 10.6. POSIX:TMR Timer Implementation Section 10.7. mycron, a Small Cron Facility Section 10.8. Additional Reading Chapter 11. Project: Cracking Shells Section 11.1. Building a Simple Shell Section 11.2. Redirection Section 11.3. Pipelines Section 11.4. Signal Handling in the Foreground Section 11.5. Process Groups, Sessions and Controlling Terminals Section 11.6. Background Processes in ush Section 11.7. Job Control Section 11.8. Job Control for ush Section 11.9. Additional Reading Part III: Concurrency Chapter 12. POSIX Threads Section 12.1. A Motivating Problem: Monitoring File Descriptors Section 12.2. Use of Threads to Monitor Multiple File Descriptors Section 12.3. Thread Management Section 12.4. Thread Safety Section 12.5. User Threads versus Kernel Threads Section 12.6. Thread Attributes Section 12.7. Exercise: Parallel File Copy Section 12.8. Additional Reading Chapter 13. Thread Synchronization Section 13.1. POSIX Synchronization Functions Section 13.2. Mutex Locks Section 13.3. At-Most-Once and At-Least-Once-Execution Section 13.4. Condition Variables Section 13.5. Signal Handling and Threads Section 13.6. Readers and Writers Section 13.7. A strerror_r Implementation Section 13.8. Deadlocks and Other Pesky Problems Section 13.9. Exercise: Multiple Barriers Section 13.10. Additional Reading Chapter 14. Critical Sections and Semaphores Section 14.1. Dealing with Critical Sections Section 14.2. Semaphores Section 14.3. POSIX:SEM Unnamed Semaphores Section 14.4. POSIX:SEM Semaphore Operations Section 14.5. POSIX:SEM Named Semaphores Section 14.6. Exercise: License Manager Section 14.7. Additional Reading Chapter 15. POSIX IPC Section 15.1. POSIX:XSI Interprocess Communication Section 15.2. POSIX:XSI Semaphore Sets Section 15.3. POSIX:XSI Shared Memory Section 15.4. POSIX:XSI Message Queues Section 15.5. Exercise: POSIX Unnamed Semaphores Section 15.6. Exercise: POSIX Named Semaphores Section 15.7. Exercise: Implementing Pipes with Shared Memory Section 15.8. Exercise: Implementing Pipes with Message Queues Section 15.9. Additional Reading Chapter 16. Project: Producer Consumer Synchronization Section 16.1. The Producer-Consumer Problem Section 16.2. Bounded Buffer Protected by Mutex Locks Section 16.3. Buffer Implementation with Semaphores Section 16.4. Introduction to a Simple Producer-Consumer Problem Section 16.5. Bounded Buffer Implementation Using Condition Variables Section 16.6. Buffers with Done Conditions Section 16.7. Parallel File Copy Section 16.8. Threaded Print Server Section 16.9. Additional Reading Chapter 17. Project: The Not Too Parallel Virtual Machine Section 17.1. PVM History, Terminology, and Architecture Section 17.2. The Not Too Parallel Virtual Machine Section 17.3. NTPVM Project Overview Section 17.4. I/O and Testing of Dispatcher Section 17.5. Single Task with No Input Section 17.6. Sequential Tasks Section 17.7. Concurrent Tasks Section 17.8. Packet Communication, Broadcast and Barriers Section 17.9. Termination and Signals Section 17.10. Ordered Message Delivery Section 17.11. Additional Reading Part IV: Communication Chapter 18. Connection-Oriented Communication Section 18.1. The Client-Server Model Section 18.2. Communication Channels Section 18.3. Connection-Oriented Server Strategies Section 18.4. Universal Internet Communication Interface (UICI) Section 18.5. UICI Implementations of Different Server Strategies Section 18.6. UICI Clients Section 18.7. Socket Implementation of UICI Section 18.8. Host Names and IP Addresses Section 18.9. Thread-Safe UICI Section 18.10. Exercise: Ping Server Section 18.11. Exercise: Transmission of Audio Section 18.12. Additional Reading Chapter 19. Project: WWW Redirection Section 19.1. The World Wide Web Section 19.2. Uniform Resource Locators (URLs) Section 19.3. HTTP Primer Section 19.4. Web Communication Patterns Section 19.5. Pass-through Monitoring of Single Connections Section 19.6. Tunnel Server Implementation Section 19.7. Server Driver for Testing Section 19.8. HTTP Header Parsing Section 19.9. Simple Proxy Server Section 19.10. Proxy Monitor Section 19.11. Proxy Cache Section 19.12. Gateways as Portals Section 19.13. Gateway for Load Balancing Section 19.14. Postmortem Section 19.15. Additional Reading Chapter 20. Connectionless Communication and Multicast Section 20.1. Introduction to Connectionless Communication Section 20.2. Simplified Interface for Connectionless Communication Section 20.3. Simple-Request Protocols Section 20.4.