Advanced Programming UNIX Environment / Edition 2by W. Richard Stevens, Stephen A. Rago
Pub. Date: 06/10/2005
"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
"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 College
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 explana-tion are unmatched."
"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."
"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 Group
For 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.
Table of Contents
Preface to the First Edition.
1. UNIX System Overview.
Files and Directories.
Input and Output.
Programs and Processes.
System Calls and Library Functions.
2. UNIX Standardization and Implementations.
UNIX System Implementations.
Relationship of Standards and Implementations.
Feature Test Macros.
Primitive System Data Types.
Conflicts Between Standards.
3. File I/O.
dup and dup2 Functions.
sync, fsync, and fdatasync Functions.
4. Files and Directories.
stat, fstat, and lstat Functions.
Set-User-ID and Set-Group-ID.
File Access Per missions.
Ownership of New Files and Directories.
chmodand fchmod Functions.
chown, fchown, and lchown Functions.
link, unlink, remove, and rename Functions.
symlinkand readlink Functions.
mkdirand rmdir Functions.
Reading Director ies.
chdir, fchdir, and getcwd Functions.
Device Special Files.
Summary of File Access Per mission Bits.
5. Standard I/O Library.
Streams and FILE Objects.
Standard Input, Standard Output, and Standard Error.
Opening a Stream.
Reading and Writing a Stream.
Standard I/O Efficiency.
Positioning a Stream.
Alternatives to Standard I/O.
6. System Data Files and Information.
Supplementary Group Ids.
Other Data Files.
Time and Date Routines.
7. Process Environment.
Memory Layout of a C Program.
setjmp and longjmp Functions.
getrlimit and setrlimit Functions.
8. Process Control.
waitand waitpid Functions.
Changing User IDs and Group IDs.
9. Process Relationships.
tcgetpgrp, tcsetpgrp, and tcgetsid Functions.
Shell Execution of Programs.
Orphaned Process Groups.
Interrupted System Calls.
Reliable-Signal Terminology and Semantics.
killand raise Functions.
alarmand pause Functions.
sigsetjmp and siglongjmp Functions.
12. Thread Control.
Threads and Signals.
Threads and fork.
Threads and I/O.
13. Daemon Processes.
14. Advanced I/O.
2 poll Function.
readv and writev Functions.
readn and written Functions.
15. Interprocess Communication.
popen and pclose Functions.
16. Network IPC: Sockets.
Nonblocking and Asynchronous I/O.
17 Advanced IPC.
Passing File Descriptors.
An Open Server, Version 1.
An Open Server, Version 2.
18. Terminal I/O.
Special Input Characters.
Getting and Setting Terminal Attributes.
Terminal Option Flags.
Baud Rate Functions.
Line Control Functions.
Terminal Window Size.
termcap, terminfo, and curses.
19. Pseudo Terminals.
Opening Pseudo-Terminal Devices.
Using the pty Program.
20. A Database Library.
Centralized or Decentralized?
Building the Library.
21. Communicating with a Network Printer.
The Inter net Printing Protocol.
The Hypertext Transfer Protocol.
Appendix A. Function Prototypes.
Appendix B. Miscellaneous Source Code.
Our Header File.
Standard Error Routines.
Appendix C. Solutions to Selected Exercises.
and post it to your social network
Most Helpful Customer Reviews
See all customer reviews >
An absolute essential reference for anyone who needs to program things the right way in a UNIX environment (GNU/Linux, Solaris, BSD, OS X, etc.). Everything is clearly explained, with complete reasoning why something should be done in a particular way, and with full examples that are not toys; e.g. they do not ignore error checking steps that should always be done in the real world, but which are frequently skipped with nothing more than comments in books, simply to save space. The flip side of this, is that the examples do build on and reference functions defined in other examples, since it would be impractical to replicate all of that for every new example. Overall, a very well written, well organized reference manual, that I have found to be indispensable to me in my day-to-day programming.
In many ways, while UNIX is still one of the most used operating system for commercial enterprise systems, it is becoming a big dated. Nevertheless, there are still thousands of programmers who really need to know how certain things are handled at the very lowest levels of the operating system and this is one of the most useful books that was ever written to cover those topics. I found the book to be very well organized and I have never really had any problems finding the information I need on specific topics. Nevertheless, whenever I refer to this book I keep my copy of 'The Magic Garden Explained' (Goodheart/Cox) handy for comparison purposes. The Stevens book is more up to date, of course, but Goodheart and Cox sometimes explain things just a bit better. In the end, though, I cannot conceive how a person can write C/C++ programs for Unix without this book. It comes across as authoritative and with the exception of using a relatively archaic form of writing the C examples, the examples are very helpful - but even when their C usage is a bit behind the times, anyone who is proficient in that language will know what corrections to make.
Many of you who learnt unix in the 90s would have cut your teeth on the first edition of this book. This second edition should be well received. It encapsulates the changes in the unix world since 92. Most importantly, it shows the rise of linux. A rise that is still unabated. Broadly, the structure of this edition matches the first edition. Rago was brought in as co-author after Stevens died in 99, and he has deliberately kept this consistency. I was glad to see that Rago kept the exercises at the end of each chapter. Many computer books seem to dispense with this, which can be a pity for anyone who needs hands on tasks to learn from. The threading chapters are a significant change from the first edition. Not simple reading, but they do reflect powerful ways to possibly optimise your code. The biggest cost for you may be the effort you need to invest in understanding the coding issues in these chapters. Rago's code examples are deliberately short, and necessarily somewhat artificial. But they do demonstrate well the various threading issues. Of course, other chapters have had minimal alterations. How much have terminal I/O or pseudoterminals changed in 10 years? Those chapters may be old friends to you.