advanced programming in the unix environment, 2nd edition, 2005

763 6.8K 0
advanced programming in the unix environment, 2nd edition, 2005

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Advanced Programming in the UNIX® Environment: Second Edition By W. Richard Stevens, Stephen A. Rago Publisher: Addison Wesley Professional Pub Date: June 17, 2005 ISBN: 0201433079 Pages: 960 Table of C ontents | Index "Stephen Rago's update is a long overdue benefit to the community of professionals using the versatile family of UNIX and UNIX-like operating environments. It removes obsolescence and includes newer developments. It also thoroughly updates the context of all topics, examples, and applications to recent releases of popular implementations of UNIX and UNIX-like environments. And yet, it does all this while retaining the style and taste of the original classic." Mukesh Kacker, cofounder and former CTO of Pronto Networks, Inc."One of the essential classics of UNIX programming." Eric S. Raymond, author of The Art of UNIX Programming"This is the definitive reference book for any serious or professional UNIX systems programmer. Rago has updated and extended the classic Stevens text while keeping true to the original. The APIs are illuminated by clear examples of their use. He also mentions many of the pitfalls to look out for when programming across different UNIX system implementations and points out how to avoid these pitfalls using relevant standards such as POSIX 1003.1, 2004 edition and the Single UNIX Specification, Version 3." Andrew Josey, Director, Certification, The Open Group, and Chair of the POSIX 1003.1 Working Group"Advanced Programming in the UNIX® Environment, Second Edition, is an essential reference for anyone writing programs for a UNIX system. It's the first book I turn to when I want to understand or re-learn any of the various system interfaces. Stephen Rago has successfully revised this book to incorporate newer operating systems such as GNU/Linux and Apple's OS X while keeping true to the first edition in terms of both readability and usefulness. It will always have a place right next to my computer." Dr. Benjamin Kuperman, Swarthmore CollegePraise for the First Edition"Advanced Programming in the UNIX® Environment is a must-have for any serious C programmer who works under UNIX. Its depth, thoroughness, and clarity of explana-tion are unmatched." UniForum Monthly"Numerous readers recommended Advanced Programming in the UNIX® Environment by W. Richard Stevens (Addison-Wesley), and I'm glad they did; I hadn't even heard of this book, and it's been out since 1992. I just got my hands on a copy, and the first few chapters have been fascinating." Open Systems Today"A much more readable and detailed treatment of UNIX internals can be found in Advanced Programming in the UNIX® Environment by W. Richard Stevens (Addison-Wesley). This book includes lots of realistic examples, and I find it quite helpful when I have systems programming tasks to do." RS/Magazine"This is the definitive reference book for any serious or professional UNIX systems programmer. Rago has updated and extended the original Stevens classic while keeping true to the original." Andrew Josey, Director, Certification, The Open Group, and Chair of the POSIX 1003.1 Working GroupFor over a decade, 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, Stevens' colleague Stephen Rago has thoroughly updated this classic to reflect the latest technical advances and add support for today's leading UNIX and Linux platforms.Rago carefully retains the spirit and approach that made this book a classic. Building on Stevens' work, he begins with basic topics such as files, directories, and processes, carefully laying the groundwork for understanding more advanced techniques, such as signal handling and terminal I/O.Substantial new material includes chapters on threads and multithreaded programming, using the socket interface to drive interprocess communication (IPC), and extensive coverage of the interfaces added to the latest version of the POSIX.1 standard. Nearly all examples have been tested on four of today's most widely used UNIX/Linux platforms: FreeBSD 5.2.1; the Linux 2.4.22 kernel; Solaris 9; and Darwin 7.4.0, the FreeBSD/Mach hybrid underlying Apple's Mac OS X 10.3.As in the first edition, you'll learn through example, including more than 10,000 lines of downloadable, ANSI C source code. More than 400 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 fully updated for contemporary environments.Advanced Programming in the UNIX® Environment has helped a generation of programmers write code with exceptional power, performance, and reliability. Now updated for today's UNIX/Linux systems, this second edition will be even more indispensable. 1 / 763 Advanced Programming in the UNIX® Environment: Second Edition By W. Richard Stevens, Stephen A. Rago Publisher: Addison Wesley Professional Pub Date: June 17, 2005 ISBN: 0201433079 Pages: 960 Table of C ontents | Index 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 2 / 763 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 3 / 763 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 4 / 763 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 5 / 763 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 6 / 763 Bibliography Index 7 / 763 Copyright Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks. Where those designations appear in this book, and the publisher was aware of a trademark claim, the designations have been printed with initial capital letters or in all capitals. The authors and publisher have taken care in the preparation of this book, but make no expressed or implied warranty of any kind and assume no responsibility for errors or omissions. No liability is assumed for incidental or consequential damages in connection with or arising out of the use of the information or programs contained herein. The publisher offers exc ellent disc ounts on this book when ordered in quantity for bulk purchases or special sales, which may include electronic versions and/or custom covers and content particular to your business, training goals, marketing focus, and branding interests. For more information, please contact: U.S. Corporate and Government Sales (800) 382-3419 corpsales@pearsontechgroup.c om For sales outside the U.S., please contact: International Sales international@pearsoned.com V isit us on the Web: www.awprofessional.com Library of Congress Cataloging-in-Publication Data: Stevens, W. Richard. Advanced programming in the Unix environment / W. Richard Stevens, Stephen A . Rago.2nd ed. p. cm. Includes bibliographic al references and index. ISBN 0-201-43307-9 (hardcover : alk. paper) 1. O perating s ystems (Computers) 2. UNIX (C omputer file) I. Rago, Stephen A . II. Title. Q A 76.76.O63S754 2005 005.4'32dc22 2005007943 Copyright © 2005 Pearson Education, Inc. A ll rights reserved. Printed in the United States of America. T his publication is protected by copyright, and permiss ion must be obtained from the publisher prior to any prohibited reproduc tion, storage in a retrieval system, or transmission in any form or by any means, electronic , mechanical, photocopying, recording, or likewise. For information regarding permissions, write to: Pearson Education, Inc. Rights and C ontracts Department O ne Lake Street Upper Saddle River, NJ 07458 0-201-43307-9 Text printed in the United States on recyc led paper at Courier in Westford, Mas sac husetts. First printing, June 2005 Dedication To Jeanne 8 / 763 Praise for Advanced Programming in the UNIX ® Environment, Second Edition "Stephen Rago's update is a long overdue benefit to the community of professionals using the versatile family of UNIX and UNI X-like operating environments. It removes obsolescence and includes newer developments. It also thoroughly updates the c ontext of all topics, examples, and applications to recent releases of popular implementations of UNIX and UNI X-like environments. A nd yet, it does all this while retaining the style and taste of the original classic." Mukes h Kacker, cofounder and former CTO of Pronto Networks, Inc. "O ne of the essential classic s of UNI X programming." Eric S. Raymond, author of The Art of UNIX Programming "This is the definitive reference book for any serious or professional UNIX systems programmer. Rago has updated and extended the classic Stevens text while keeping true to the original. T he AP Is are illuminated by clear examples of their us e. He also mentions many of the pitfalls to look out for when programming across different UNIX system implementations and points out how to avoid these pitfalls us ing relevant standards such as PO SIX 1003.1, 2004 edition and the Single UNIX Specification, Version 3." A ndrew Josey, Director, Certification, The Open Group, and C hair of the P O SIX 1003.1 Working Group "Advanced Programming in the UNIX ® Environment, Second Edition, is an ess ential reference for anyone writing programs for a UNIX system. It's the first book I turn to when I want to understand or re-learn any of the various system interfaces. Stephen Rago has succes sfully revis ed this book to incorporate newer operating sys tems such as GNU/Linux and A pple's OS X while keeping true to the first edition in terms of both readability and usefulness . It will always have a place right next to my computer." Dr. Benjamin Kuperman, Swarthmore College 9 / 763 Praise for the First Edition "Advanced Programming in the UNIX ® Environment is a must-have for any serious C programmer who works under UNIX. Its depth, thoroughness, and clarity of explanation are unmatched." UniForum Monthly "Numerous readers recommended Advanced Programming in the UNIX ® Environment by W. Richard Stevens (A ddis on-Wesley), and I'm glad they did; I hadn't even heard of this book, and it's been out since 1992. I just got my hands on a copy, and the first few chapters have been fasc inating." Open Systems Today "A much more readable and detailed treatment of [UNIX internals] can be found in Advanced Programming in the UNIX ® Environment by W. Richard Stevens (A ddison-Wesley). This book includes lots of realistic examples, and I find it quite helpful when I have systems programming tasks to do." RS/Magazine 10 / 763 [...]... group names and group IDs The ls -l command, for example, prints the login name of the owner of a file, using the password file to map the numeric user ID into the corresponding login name Early UNIX systems used 16-bit integers to represent user and group IDs Contemporary UNIX systems use 32-bit integers Example The program in Figure 1.9 prints the user ID and the group ID We call the functions getuid... tempered by the various international standards that were started during the late 1980s These include the A NSI standard for the C programming language, the IEEE PO SIX family (still being developed), and the X/O pen portability guide This book also describes these standards But instead of just describing the standards by themselves, we describe them in relation to popular implementations of the standardsSystem... Jersey April 2005 Stephen A Rago sar@apuebook.com 16 / 763 Preface to the First Edition Introduction Unix Standards O rganization of the Book Examples in the Text Systems Used to Test the Examples A cknowledgments 17 / 763 Introduction This book describes the programming interface to the Unix systemthe system call interface and many of the functions provided in the standard C library It is intended for... as simply Linux A lthough this usage may not be correct in a strict sense, it is understandable, given the dual meaning of the phrase operating system (It also has the advantage of being more succinct.) 26 / 763 1.3 Logging In Login Name When we log in to a UNIX system, we enter our login name, followed by our password The system then looks up our login name in its password file, usually the file /etc/passwd... completion, from the TENEX operating system (developed in 1972 at Bolt Beranek and Newman) The TENEX C shell adds many features to the C shell and is often used as a replacement for the C shell Linux uses the Bourne-again shell for its default shell In fact, /bin/sh is a link to /bin/bash The default user shell in FreeBSD and Mac O S X is the TENEX C shell, but they use the Bourne shell for their administrative... with Unix is assumed This text is intended for programmers familiar with Unix and programmers familiar with some other operating system who wish to learn the details of the services provided by most Unix systems 20 / 763 Examples in the Text This book contains many examplesapproximately 10,000 lines of source code A ll the examples are in the C programming language Furthermore, these examples are in. .. order The ls command sorts the names before printing them There are many details to consider in this 20-line program First, we include a header of our own: apue.h We include this header in almost every program in this text This header includes some standard system headers and defines numerous constants and function prototypes that we use throughout the examples in the text A listing of this header is in. .. worry about choosing optimal buffer sizes, such as the BUFFSIZE constant in Figure 1.4 A nother advantage of using the standard I/O functions is that they simplify dealing with lines of input (a common occurrence in UNIX applications) The fgets function, for example, reads an entire line The read function, on the other hand, reads a specified number of bytes A s we shall see in Section 5.4, the standard... that let us control the style of buffering used by the library 30 / 763 The most common standard I/O function is printf In programs that call printf , we'll always include normally by including apue.h as this header contains the function prototypes for all the standard I/O functions Example The program in Figure 1.5, which we'll examine in more detail in Section 5.8, is like the previous program... read from the standard input This replaces the child process with the new program file The combination of a fork , followed by an exec , is what some operating systems call spawning a new process In the UNIX System, the two parts are separated into individual functions We'll have a lot more to say about these functions in Chapter 8 Because the child calls execlp to execute the new program file, the parent . Internetworking Protocols Stephen A . Rago, UNIX ® System V Network Programming Eric S. Raymond, The Art of UNIX Programming Marc J. Roc hkind, Advanced UNIX Programming, Second Edition Curt Schimmel, UNIX ® . printed in the United States on recyc led paper at Courier in Westford, Mas sac husetts. First printing, June 2005 Dedication To Jeanne 8 / 763 Praise for Advanced Programming in the UNIX ® . Chair of the POSIX 1003.1 Working Group" ;Advanced Programming in the UNIX Environment, Second Edition, is an essential reference for anyone writing programs for a UNIX system. It's the first

Ngày đăng: 07/04/2014, 15:00

Từ khóa liên quan

Mục lục

  • Advanced Programming in the UNIX® Environment: Second Edition

  • Table of Contents

  • 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

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan