1 option
Advanced programming in the UNIX environment / W. Richard Stevens, Stephen A. Rago
- Format:
- Book
- Author/Creator:
- Stevens, W. Richard, Author.
- Rago, Stephen A., author.
- Series:
- Addison-Wesley professional computing
- Addison-Wesley professional computing series
- Language:
- English
- Subjects (All):
- UNIX (Computer file).
- Operating systems (Computers).
- Physical Description:
- 1 online resource : illustrations
- Edition:
- Third edition
- Place of Publication:
- Upper Saddle River, N.J. : Addison Wesley [2013]
- Language Note:
- English
- Summary:
- For more than twenty years, serious C programmers have relied on one book for practical, in-depth knowledge of the programming interfaces that drive the UNIX and Linux kernels: W. Richard Stevens’ Advanced Programming in the UNIX® Environment . Now, once again, Rich’s colleague Steve Rago has thoroughly updated this classic work. The new third edition supports today’s leading platforms, reflects new technical advances and best practices, and aligns with Version 4 of the Single UNIX Specification. Steve carefully retains the spirit and approach that have made this book so valuable. Building on Rich’s pioneering work, he begins with files, directories, and processes, carefully laying the groundwork for more advanced techniques, such as signal handling and terminal I/O. He also thoroughly covers threads and multithreaded programming, and socket-based IPC. This edition covers more than seventy new interfaces, including POSIX asynchronous I/O, spin locks, barriers, and POSIX semaphores. Most obsolete interfaces have been removed, except for a few that are ubiquitous. Nearly all examples have been tested on four modern platforms: Solaris 10, Mac OS X version 10.6.8 (Darwin 10.8.0), FreeBSD 8.0, and Ubuntu version 12.04 (based on Linux 3.2). As in previous editions, you’ll learn through examples, including more than ten thousand lines of downloadable, ISO C source code. More than four hundred system calls and functions are demonstrated with concise, complete programs that clearly illustrate their usage, arguments, and return values. To tie together what you’ve learned, the book presents several chapter-length case studies, each reflecting contemporary environments. Advanced Programming in the UNIX® Environment has helped generations of programmers write code with exceptional power, performance, and reliability. Now updated for today’s systems, this third edition will be even more valuable.
- Contents:
- Intro
- About This eBook
- Title Page
- Copyright Page
- Praise for Advanced Programming in the UNIX® Environment, Second Edition
- Praise for the First Edition
- Dedication Page
- Contents
- Foreword to the Second Edition
- Preface
- Introduction
- Changes from the Second Edition
- Acknowledgments
- Preface to the Second Edition
- Changes from the First Edition
- Preface to the First Edition
- Unix Standards
- Organization of the Book
- Examples in the Text
- Systems Used to Test the Examples
- 1. UNIX System Overview
- 1.1. Introduction
- 1.2. UNIX Architecture
- 1.3. Logging In
- 1.4. Files and Directories
- 1.5. Input and Output
- 1.6. Programs and Processes
- 1.7. Error Handling
- 1.8. User Identification
- 1.9. Signals
- 1.10. Time Values
- 1.11. System Calls and Library Functions
- 1.12. Summary
- Exercises
- 2. UNIX Standardization and Implementations
- 2.1. Introduction
- 2.2. UNIX Standardization
- 2.3. UNIX System Implementations
- 2.4. Relationship of Standards and Implementations
- 2.5. Limits
- 2.6. Options
- 2.7. Feature Test Macros
- 2.8. Primitive System Data Types
- 2.9. Differences Between Standards
- 2.10. Summary
- 3. File I/O
- 3.1. Introduction
- 3.2. File Descriptors
- 3.3. open and openat Functions
- 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. sync, fsync, and fdatasync Functions
- 3.14. fcntl Function
- 3.15. ioctl Function
- 3.16. /dev/fd
- 3.17. Summary
- 4. Files and Directories
- 4.1. Introduction
- 4.2. stat, fstat, fstatat, and lstat Functions
- 4.3. File Types.
- 4.4. Set-User-ID and Set-Group-ID
- 4.5. File Access Permissions
- 4.6. Ownership of New Files and Directories
- 4.7. access and faccessat Functions
- 4.8. umask Function
- 4.9. chmod, fchmod, and fchmodat Functions
- 4.10. Sticky Bit
- 4.11. chown, fchown, fchownat, and lchown Functions
- 4.12. File Size
- 4.13. File Truncation
- 4.14. File Systems
- 4.15. link, linkat, unlink, unlinkat, and remove Functions
- 4.16. rename and renameat Functions
- 4.17. Symbolic Links
- 4.18. Creating and Reading Symbolic Links
- 4.19. File Times
- 4.20. futimens, utimensat, and utimes Functions
- 4.21. mkdir, mkdirat, and rmdir Functions
- 4.22. Reading Directories
- 4.23. chdir, fchdir, and getcwd Functions
- 4.24. Device Special Files
- 4.25. Summary of File Access Permission Bits
- 4.26. Summary
- 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. Positioning a Stream
- 5.11. Formatted I/O
- 5.12. Implementation Details
- 5.13. Temporary Files
- 5.14. Memory Streams
- 5.15. Alternatives to Standard I/O
- 5.16. Summary
- 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. Implementation Differences
- 6.7. Other Data Files
- 6.8. Login Accounting
- 6.9. System Identification
- 6.10. Time and Date Routines
- 6.11. Summary
- 7. Process Environment
- 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. setjmp and longjmp Functions
- 7.11. getrlimit and setrlimit Functions
- 7.12. Summary
- 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. waitid Function
- 8.8. wait3 and wait4 Functions
- 8.9. Race Conditions
- 8.10. exec Functions
- 8.11. Changing User IDs and Group IDs
- 8.12. Interpreter Files
- 8.13. system Function
- 8.14. Process Accounting
- 8.15. User Identification
- 8.16. Process Scheduling
- 8.17. Process Times
- 8.18. Summary
- 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. tcgetpgrp, tcsetpgrp, and tcgetsid Functions
- 9.8. Job Control
- 9.9. Shell Execution of Programs
- 9.10. Orphaned Process Groups
- 9.11. FreeBSD Implementation
- 9.12. Summary
- 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 raise Functions
- 10.10. alarm and pause Functions
- 10.11. Signal Sets
- 10.12. sigprocmask Function
- 10.13. sigpending Function
- 10.14. sigaction Function
- 10.15. sigsetjmp and siglongjmp Functions
- 10.16. sigsuspend Function
- 10.17. abort Function
- 10.18. system Function
- 10.19. sleep, nanosleep, and clock_nanosleep Functions
- 10.20. sigqueue Function
- 10.21. Job-Control Signals
- 10.22. Signal Names and Numbers
- 10.23. Summary
- 11. Threads
- 11.1. Introduction
- 11.2. Thread Concepts
- 11.3. Thread Identification.
- 11.4. Thread Creation
- 11.5. Thread Termination
- 11.6. Thread Synchronization
- 11.7. Summary
- 12. Thread Control
- 12.1. Introduction
- 12.2. Thread Limits
- 12.3. Thread Attributes
- 12.4. Synchronization Attributes
- 12.5. Reentrancy
- 12.6. Thread-Specific Data
- 12.7. Cancel Options
- 12.8. Threads and Signals
- 12.9. Threads and fork
- 12.10. Threads and I/O
- 12.11. Summary
- 13. Daemon Processes
- 13.1. Introduction
- 13.2. Daemon Characteristics
- 13.3. Coding Rules
- 13.4. Error Logging
- 13.5. Single-Instance Daemons
- 13.6. Daemon Conventions
- 13.7. Client-Server Model
- 13.8. Summary
- 14. Advanced I/O
- 14.1. Introduction
- 14.2. Nonblocking I/O
- 14.3. Record Locking
- 14.4. I/O Multiplexing
- 14.5. Asynchronous I/O
- 14.6. readv and writev Functions
- 14.7. readn and writen Functions
- 14.8. Memory-Mapped I/O
- 14.9. Summary
- 15. Interprocess Communication
- 15.1. Introduction
- 15.2. Pipes
- 15.3. popen and pclose Functions
- 15.4. Coprocesses
- 15.5. FIFOs
- 15.6. XSI IPC
- 15.7. Message Queues
- 15.8. Semaphores
- 15.9. Shared Memory
- 15.10. POSIX Semaphores
- 15.11. Client-Server Properties
- 15.12. Summary
- 16. Network IPC: Sockets
- 16.1. Introduction
- 16.2. Socket Descriptors
- 16.3. Addressing
- 16.4. Connection Establishment
- 16.5. Data Transfer
- 16.6. Socket Options
- 16.7. Out-of-Band Data
- 16.8. Nonblocking and Asynchronous I/O
- 16.9. Summary
- 17. Advanced IPC
- 17.1. Introduction
- 17.2. UNIX Domain Sockets
- 17.3. Unique Connections
- 17.4. Passing File Descriptors
- 17.5. An Open Server, Version 1
- 17.6. An Open Server, Version 2
- 17.7. Summary
- 18. Terminal I/O
- 18.1. Introduction
- 18.2. Overview
- 18.3. Special Input Characters.
- 18.4. Getting and Setting Terminal Attributes
- 18.5. Terminal Option Flags
- 18.6. stty Command
- 18.7. Baud Rate Functions
- 18.8. Line Control Functions
- 18.9. Terminal Identification
- 18.10. Canonical Mode
- 18.11. Noncanonical Mode
- 18.12. Terminal Window Size
- 18.13. termcap, terminfo, and curses
- 18.14. Summary
- 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
- 20. A Database Library
- 20.1. Introduction
- 20.2. History
- 20.3. The Library
- 20.4. Implementation Overview
- 20.5. Centralized or Decentralized?
- 20.6. Concurrency
- 20.7. Building the Library
- 20.8. Source Code
- 20.9. Performance
- 20.10. Summary
- 21. Communicating with a Network Printer
- 21.1. Introduction
- 21.2. The Internet Printing Protocol
- 21.3. The Hypertext Transfer Protocol
- 21.4. Printer Spooling
- 21.5. Source Code
- 21.6. 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
- 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.
- Notes:
- Includes bibliographical references.
- Description based on publisher supplied metadata and other sources.
- ISBN:
- 9780321638007
- 032163800X
- 9780321637994
- 0321637992
- 9780321637734
- 0321637739
- OCLC:
- 813047298
The Penn Libraries is committed to describing library materials using current, accurate, and responsible language. If you discover outdated or inaccurate language, please fill out this feedback form to report it and suggest alternative language.