From the book lists at Adware Report:

All information current as of 19:05:04 Pacific Time, Monday, 21 February 2005.

UNIX Network Programming, Volume 2: Interprocess Communications (2nd Edition)

   by W. Richard Stevens

  Hardcover:
    Prentice Hall PTR
    25 August, 1998

   US$66.00 

   Usually ships in 24 hours

Click the button below to . . .

    
(which will add the book to your Amazon U.S.A. "Shopping Cart")

. . . or use your browser's Back button to return to the search-list page.

Editorial description(s):

Amazon.com
The first volume of Unix Network Programming,
covers just about everything you need to know to get your applications to talk to other computers on a network. In this second volume, W. Richard Stevens discusses what you need to know to get your applications to talk to other applications running on your computer. There's a big difference, and Stevens covers it well.

Stevens introduces the reader to the internal structures of Posix interprocess communication (IPC) and System V (SysV) IPC; pipes and first in, first outs (FIFOs); message queues; how to lock and unlock files and records; semaphores; shared memory; and remote procedure calls (RPCs). He explains the difference between the Posix and SysV implementations of semaphores, message queues, and shared memory. There are also plenty of notes and examples for the reader.

This book is invaluable for programmers because it explains all of those little "gotchas" that always seem to pop up. In addition, the explanations of the differences between Posix IPC and SysV IPC really help readers decide which version they'd like to use for their applications. --Doug Beaver


Book Info
Presents a comprehensive guide to every form of IPC, including message passing, synchronization, shared memory, & Remote Procedure Calls (RPC). Text contains extensive new source code - all carefully optimized & available on the Web. DLC: Unix (Computer file).



From the Inside Flap
Preface

Introduction
Most nontrivial programs involve some form of IPC or Interprocess Communication. This is a natural effect of the design principle that the better approach is to design an application as a group of small pieces that communicate with each other, instead of designing one huge monolithic program. Historically, applications have been built in the following ways:
1. One huge monolithic program that does everything. The various pieces of the program can be implemented as functions that exchange information as function parameters, function return values, and global variables.
2. Multiple programs that communicate with each other using some form of IPC. Many of the standard Unix tools were designed in this fashion, using shell pipelines (a form of IPC) to pass information from one program to the next.
3. One program comprised of multiple threads that communicate with each other using some type of IPC. The term IPC describes this communication even though it is between threads and not between processes. Combinations of the second two forms of design are also possible: multiple processes, each consisting of one or more threads, involving communication between the threads within a given process and between the different processes.

What I have described is distributing the work involved in performing a given application between multiple processes and perhaps among the threads within a process. On a system containing multiple processors (CPUs), multiple processes might be able to run at the same time (on different CPUs), or the multiple threads of a given process might be able to run at the same time. Therefore, distributing an application among multiple processes or threads might reduce the amount of time required for an application to perform a given task.

This book describes four different forms of IPC in detail:
1. message passing (pipes, FIFOs, and message queues),
2. synchronization (mutexes, condition variables, read-write locks, file and record locks, and semaphores),
3. shared memory (anonymous and named), and
4. remote procedure calls (Solaris doors and Sun RPC).

This book does not cover the writing of programs that communicate across a computer network. This form of communication normally involves what is called the sockets API (application program interface) using the TCP/IP protocol suite; these topics are covered in detail in Volume 1 of this series Stevens 1998.
One could argue that single-host or nonnetworked IPC (the subject of this volume) should not be used and instead all applications should be written as distributed applications that run on various hosts across a network. Practically, however, single-host IPC is often much faster and sometimes simpler than communicating across a network. Techniques such as shared memory and synchronization are normally available only on a single host, and may not be used across a network. Experience and history have shown a need for both nonnetworked IPC (this volume) and IPC across a network (Volume 1 of this series).
This current volume builds on the foundation of Volume 1 and my other four books, which are abbreviated throughout this text as follows:
UNPv1: UNIX Network Programming, Volume 1 Stevens 1998,
APUE: Advanced Programming in the UNIX Environment Stevens 1992,
TCPv1: TCP/IP Illustrated, Volume 1 Stevens 1994,
TCPv2: TCP/IP Illustrated, Volume 2 Wright and Stevens 1995, and
TCPv3: TCP/IP Illustrated, Volume 3 Stevens 1996.

Although covering IPC in a text with "network programming" in the title might seem odd, IPC is often used in networked applications. As stated in the Preface of the 1990 edition of UNIX Network Programming, "A requisite for understanding how to develop software for a network is an understanding of interprocess communication (IPC)."

Changes from the First Edition
This volume is a complete rewri te and expansion of Chapters 3 and 18 from the 1990 edition of UNIX Network Programming. Based on a word count, the material has expanded by a factor of five. The following are the major changes with this new edition:
In addition to the three forms of "System V IPC" (message queues, semaphores, and shared memory), the newer Posix functions that implement these three types of IPC are also covered. (I say more about the Posix family of standards in Section 1.7.) In the coming years, I expect a movement to the Posix IPC functions, which have several advantages over their System V counterparts.
The Posix functions for synchronization are covered: mutex locks, condition variables, and read-write locks. These can be used to synchronize either threads or processes and are often used when accessing shared memory.
This volume assumes a Posix threads environment (called "Pthreads"), and many of the examples are built using multiple threads instead of multiple processes.
The coverage of pipes, FIFOs, and record locking focuses on their Posix definitions.
In addition to describing the IPC facilities and showing how to use them, I also develop implementations of Posix message queues, read-write locks, and Posix semaphores (all of which can be implemented as user libraries). These implementations can tie together many different features (e.g., one implementation of Posix semaphores uses mutexes, condition variables, and memory-mapped I/O) and highlight conditions that must often be handled in our applications (such as race conditions, error handling, memory leaks, and variable-length argument lists). Understanding an implementation of a certain feature often leads to a greater knowledge of how to use that feature.
The RPC coverage focuses on the Sun RPC package. I precede this with a description of the new Solaris doors API, which is similar to RPC but on a single host. This provides an introduction to many of the features that we need to worry about when calling procedures in another process, without having to worry about any networking details.

Readers
This text can be used either as a tutorial on IPC, or as a reference for experienced programmers. The book is divided into four main parts:
message passing,
synchronization,
shared memory, and
remote procedure calls
but many readers will probably be interested in specific subsets. Most chapters can be read independently of others, although Chapter 2 summarizes many features common to all the Posix IPC functions, Chapter 3 summarizes many features common to all the System V IPC functions, and Chapter 12 is an introduction to both Posix and System V shared memory. All readers should read Chapter 1, especially Section 1.6, which describes some wrapper functions used throughout the text. The Posix IPC chapters are independent of the System V IPC chapters, and the chapters on pipes, FIFOs, and record locking belong to neither camp. The two chapters on RPC are also independent of the other IPC techniques.
To aid in the use as a reference, a thorough index is provided, along with summaries on the end papers of where to find detailed descriptions of all the functions and structures. To help those reading topics in a random order, numerous references to related topics are provided throughout the text.

Source Code and Errata Availability
The source code for all the examples that appear in this book is available from the author's home page (listed at the end of this Preface). The best way to learn the IPC techniques described in this book is to take these programs, modify them, and enhance them. Actually writing code of this form is the only way to reinforce the concepts and techniques. Numerous exercises are also provided at the end of each chapter, and most answers are provided in Appendix D.
A current errata for this book is also available from the author's home page.

Acknowledgments
Although the author's name is the only one to appear on the cover, the combined effort of many people is requi red to produce a quality text book. First and foremost is the author's family, who put up with the long and weird hours that go into writing a book. Thank you once again, Sally, Bill, Ellen, and David.
My thanks to the technical reviewers who provided invaluable feedback (135 printed pages) catching lots of errors, pointing out areas that needed more explanation, and suggesting alternative presentations, wording, and coding: Gavin Bowe, Allen Briggs, Dave Butenhof, Wan-Teh Chang, Chris Cleeland, Bob Friesenhahn, Andrew Gierth, Scott Johnson, Marty Leisner, Larry McVoy, Craig Metz, Bob Nelson, Steve Rago, Jim Reid, Swamy K. Sitarama, Jon C. Snader, Ian Lance Taylor, Rich Teer, and Andy Tucker.

The following people answered email questions of mine, in some cases many questions, all of which improved the accuracy and presentation of the text: David Bausum, Dave Butenhof, Bill Gallmeister, Mukesh Kacker, Brian Kernighan, Larry McVoy, Steve Rago, Keith Skowran, Bart Smaalders, Andy Tucker, and John Wait.
A special thanks to Larry Rafsky at GSquared, for lots of things. My thanks as usual to the National Optical Astronomy Observatories (NOAO), Sidney Wolff, Richard Wolff, and Steve Grandi, for providing access to their networks and hosts. Jim Bound, Matt Thomas, Mary Clouter, and Barb Glover of Digital Equipment Corp. provided the Alpha system used for most of the examples in this text. A subset of the code in this book was tested on other Unix systems: my thanks to Michael Johnson of Red Hat Software for providing the latest releases of Red Hat Linux, and to Dave Marquardt and Jessie Haug of IBM Austin for an RS/6000 system and access to the latest releases of AIX.
My thanks to the wonderful staff at Prentice Hall-my editor Mary Franz, along with Noreen Regina, Sophie Papanikolaou, and Patti Guerrieri-for all their help, especially in bringing everything together on a tight schedule.

Colophon
I produced camera-ready copy of the book (PostScript), which was then typeset for the final book. The formatting system used was James Clark's wonderful groff package, on a SparcStation running Solaris 2.6. (Reports of troff's death are greatly exaggerated.) I typed in all 138,897 words using the vi editor, created the 72 illustrations using the gpic program (using many of Gary Wright's macros), produced the 35 tables using the gtbl program, performed all the indexing (using a set of awk scripts written by Jon Bentley and Brian Kernighan), and did the final page layout. Dave Hanson's loom program, the GNU indent program, and some scripts by Gary Wright were used to include the 8,046 lines of C source code in the book.
I welcome email from any readers with comments, suggestions, or bug fixes.
Tucson, Arizona

W. Richard Stevens
July 1998
rstevens@kohala
kohala/~rstevens



From the Back Cover



8108A-2

Don't miss the rest of the series!



The only guide to UNIX(r) interprocess communications you'll ever need!



Well-implemented interprocess communications (IPC) are key to the performance of virtually every non-trivial UNIX program. In UNIX Network Programming, Volume 2, Second Edition, legendary UNIX expert W. Richard Stevens presents a comprehensive guide to every form of IPC, including message passing, synchronization, shared memory, and Remote Procedure Calls (RPC).



Stevens begins with a basic introduction to IPC and the problems it is intended to solve. Step-by-step you'll learn how to maximize both System V IPC and the new Posix standards, which offer dramatic improvements in convenience and performance. You'll find extensive coverage of Pthreads, with many examples reflecting multiple threads instead of multiple processes. Along the way, you'll master every current IPC technique and technology, including:



If you've read Stevens' best-selling first edition of UNIX Network Programming, this book expands its IPC coverage by a factor of five! You won't just learn about IPC "from the outside." You'll actually create implementations of Posix message queues, read-write locks, and semaphores, gaining an in-depth understanding of these capabilities you simply can't get anywhere else.



The book contains extensive new source code-all carefully optimized and available on the Web. You'll even find a complete guide to measuring IPC performance with message passing bandwidth and latency programs, and thread and process synchronization programs.



The better you understand IPC, the better your UNIX software will run. One book contains all you need to know: UNIX Network Programming, Volume 2, Second Edition.




About the Author


W. RICHARD STEVENS is author of UNIX Network Programming, First Edition, widely recognized as the classic text in UNIX networking. He is also author of Advanced Programming in the UNIX Environment and the TCP/IP Illustrated Series. Stevens is an acknowledged UNIX and networking expert, sought-after Instructor, and occasional consultant.



Excerpt. © Reprinted by permission. All rights reserved.
Preface

Introduction
Most nontrivial programs involve some form of IPC or Interprocess Communication. This is a natural effect of the design principle that the better approach is to design an application as a group of small pieces that communicate with each other, instead of designing one huge monolithic program. Historically, applications have been built in the following ways:
1. One huge monolithic program that does everything. The various pieces of the program can be implemented as functions that exchange information as function parameters, function return values, and global variables.
2. Multiple programs that communicate with each other using some form of IPC. Many of the standard Unix tools were designed in this fashion, using shell pipelines (a form of IPC) to pass information from one program to the next.
3. One program comprised of multiple threads that communicate with each other using some type of IPC. The term IPC describes this communication even though it is between threads and not between processes. Combinations of the second two forms of design are also possible: multiple processes, each consisting of one or more threads, involving communication between the threads within a given process and between the different processes.


What I have described is distributing the work involved in performing a given application between multiple processes and perhaps among the threads within a process. On a system containing multiple processors (CPUs), multiple processes might be able to run at the same time (on different CPUs), or the multiple threads of a given process might be able to run at the same time. Therefore, distributing an application among multiple processes or threads might reduce the amount of time required for an application to perform a given task.

This book describes four different forms of IPC in detail:
1. message passing (pipes, FIFOs, and message queues),
2. synchronization (mutexes, condition variables, read-write locks, file and record locks, and semaphores),
3. shared memory (anonymous and named), and
4. remote procedure calls (Solaris doors and Sun RPC).


This book does not cover the writing of programs that communicate across a computer network. This form of communication normally involves what is called the sockets API (application program interface) using the TCP/IP protocol suite; these topics are covered in detail in Volume 1 of this series Stevens 1998.
One could argue that single-host or nonnetworked IPC (the subject of this volume) should not be used and instead all applications should be written as distributed applications that run on various hosts across a network. Practically, however, single-host IPC is often much faster and sometimes simpler than communicating across a network. Techniques such as shared memory and synchronization are normally available only on a single host, and may not be used across a network. Experience and history have shown a need for both nonnetworked IPC (this volume) and IPC across a network (Volume 1 of this series).
This current volume builds on the foundation of Volume 1 and my other four books, which are abbreviated throughout this text as follows:


Although covering IPC in a text with "network programming" in the title might seem odd, IPC is often used in networked applications. As stated in the Preface of the 1990 edition of UNIX Network Programming, "A requisite for understanding how to develop software for a n etwork is an understanding of interprocess communication (IPC)."

Changes from the First Edition
This volume is a complete rewrite and expansion of Chapters 3 and 18 from the 1990 edition of UNIX Network Programming. Based on a word count, the material has expanded by a factor of five. The following are the major changes with this new edition:


Readers
This text can be used either as a tutorial on IPC, or as a reference for experienced programmers. The book is divided into four main parts:
but many readers will probably be interested in specific subsets. Most chapters can be read independently of others, although Chapter 2 summarizes many features common to all the Posix IPC functions, Chapter 3 summarizes many features common to all the System V IPC functions, and Chapter 12 is an introduction to both Posix and System V shared memory. All readers should read Chapter 1, especially Section 1.6, which describes some wrapper functions used throughout the text. The Posix IPC chapters are independent of the System V IPC chapters, and the chapters on pipes, FIFOs, and record locking belong to neither camp. The two chapters on RPC are also independent of the other IPC techniques.
To aid in the use as a reference, a thorough index is provided, along with summaries on the end papers of where to find detailed descriptions of all the functions and structures. To help those reading topics in a random order, numerous references to related topics are provided throughout the text.

Source Code and Errata Availability
The source code for all the examples that appear in this book is available from the author's home page (listed at the end of this Preface). The best way to learn the IPC techniques described in this book is to take these programs, modify them, and enhance them. Actually writing code of this form is the only way to reinforce the concepts and techniques. Numerous exercises are also provided at the end of each chapter, and most answers are provided in Appendix D.
A current errata for this book is also available from the author's home page.

Acknowledgments
Although the author's name is the only one to appear on the cover, the combined effort of many people is required to produce a quality text book. First and foremost is the author's family, who put up with the long and weird hours that go into writing a book. Thank you once again, Sally, Bill, Ellen, and David.
My thanks to the technical reviewers who provided invaluable feedback (135 printed pages) catching lots of errors, pointing out areas that needed more explanation, and suggesting alternative presentations, wording, and coding: Gavin Bowe, Allen Briggs, Dave Butenhof, Wan-Teh Chang, Chris Cleeland, Bob Friesenhahn, Andrew Gierth, Scott Johnson, Marty Leisner, Larry McVoy, Craig Metz, Bob Nelson, Steve Rago, Jim Reid, Swamy K. Sitarama, Jon C. Snader, Ian Lance Taylor, Rich Teer, and Andy Tucker. The following people answered email questions of mine, in some cases many questions, all of which improved the accuracy and presentation of the text: David Bausum, Dave Butenhof, Bill Gallmeister, Mukesh Kacker, Brian Kernighan, Larry McVoy, Steve Rago, Keith Skowran, Bart Smaalders, Andy Tucker, and John Wait.
A special thanks to Larry Rafsky at GSquared, for lots of things. My thanks as usual to the National Optical Astronomy Observatories (NOAO), Sidney Wolff, Richard Wolff, and Steve Grandi, for providing access to their networks and hosts. Jim Bound, Matt Thomas, Mary Clouter, and Barb Glover of Digital Equipment Corp. provided the Alpha system used for most of the examples in this text. A subset of the code in this book was tested on other Unix systems: my thanks to Michael Johnson of Red Hat Software for providing the latest releases of Red Hat Linux, and to Dave Marquardt and Jessie Haug of IBM Austin for an RS/6000 system and access to the latest releases of AIX.
My thanks to the wonderful staff at Prentice Hall-my editor Mary Franz, along with Noreen Regina, Sophie Papanikolaou, and Patti Guerrieri-for all their help, especially in bringing everything together on a tight schedule.

Colophon
I produced camera-ready copy of the book (PostScript), which was then typeset for the final book. The formatting system used was James Clark's wonderful groff package, on a SparcStation running Solaris 2.6. (Reports of troff's death are greatly exaggerated.) I typed in all 138,897 words using the vi editor, created the 72 illustrations using the gpic program (using many of Gary Wright's macros), produced the 35 tables using the gtbl program, performed all the indexing (using a set of awk scripts written by Jon Bentley and Brian Kernighan), and did the final page layout. Dave Hanson's loom program, the GNU indent program, and some scripts by Gary Wright were used to include the 8,046 lines of C source code in the book.
I welcome email from any readers with comments, suggestions, or bug fixes.
Tucson, Arizona

W. Richard Stevens
July 1998
[email protected]
http://www.kohala.com/~rstevens


Reader review(s):

Five star book on a four star subject, July 15, 2001
Since anyone considering buying a technical book always needs to know what it covers, here's the table of contents:

Part 1. Introduction

1. Introduction

2. Posix IPC

3. System V IPC

Part 2. Message Passing

4. Pipes and FIFOs

5. Posix Message Queues

6. System V Message Queues

Part 3. Synchronization

7. Mutexes and Condition Variables

8. Read-Write Locks

9. Record Locking

10. Posix Semaphores

11. System V Semaphores

Part 4. Shared Memory

12. Shared Memory Introduction

13. Posix Shared Memory

14. System V Shared Memory

Part 5. Remote Procedure Calls

15. Doors

16. Sun RPC

Epilogue

Appendix A. Performance Measurements

Appendix B. Threads Primer

Appendix C. Miscellaneous Source Code

Appendix D. Solutions to Selected Exercises

Bibliography

Index

This is the third and least of Stevens' three books on UNIX programming (he also coauthored a multi-volume work on TCP). It is the not the least because it is necessarily the worst, but because it has the shortest and has the narrowest application domain.

Having said it is the least, it remains a work of the highest quality in an industry that is notable for the huge quantity of bad books that it produces. The structure of this book will be familiar to readers of his prior two books: the lowest-level building block around which Stevens structures the book is the individual function call. For each call (or minor variations on a single call), he provides the C prototype, and then, in text, explains what the function does, what it's arguments are for, and then provides a small C program that demonstrates it in action (all of the sample programs can also be downloaded from the web). These function-level building blocks are arranged into related sets, each of which is a chapter in the book. Each chapter has a wrapper that explains the basic concepts behind the functions in that chapter, and some review exercises at the end. The chapters in turn build on each other, with the most basic ones at the beginning and the more difficult ones towards the end.

In spite of the book's many positive qualities, one thing that this book brings to light, however, is that there is a thread-sized hole in Stevens' UNIX writings. "Advanced Programming in the UNIX Environment" had a great deal of information about processes, but nothing about threads. "UNIX Network Programming: Volume 1", discussed multi-threaded socket programs, but didn't go into any depth on threading. This volume, although it discusses thread synchronization, only touches on general threading issues. Thus, the works, taken as a group, go into some of the important issues and uses of threading without giving the reader a solid grounding in the subject. As threading increases in frequency, this deficiency has grown in importance.

Another difference between this book and its predecessors is that it deals with an area where standards are much weaker than the others; thus, the chapters often have to explain different implementations for accomplishing a task rather than building a basic-to-advanced sequence. This obviously is in no way Stevens' fault, but many readers will find that half the book, which is already the thinnest of Stevens' programming books, is concerned with API's which do not exist on their platform of interest.

To sum up, while this review clearly shows the reservations I have about this book compared to its predecessors, it must still be stressed that Stevens' is a technical author of the highest level. If you do have a need to understand any of the subjects in this book, you won't find a better teacher from which to learn it, and that is why I am still giving the book five stars.

A must own for every serious programmer, March 30, 2001
This book is a must own for every serious programmer on the unix platform. It provides an insight on various forms of IPC APIs available on the unix platform. It provides coverage of both System V and POSIX standards, there is no match to it as far as IPC is concerned. The Appendices in the end also provide a performance comparison between pipes, FIFOs, posix message queues, System V message queues, doors and Sun RPC. I have not seen another book provide such a wide and deep coverage of this topic. What more - it all comes from the GURU himself!

The real power of UNIX is in communication, October 4, 2004
The real power of UNIX or any application for that matter is in interprocess communication. I found early on that to accomplish any large project would require the cooperation of interprocess communication. Now I find that simple administration skills also require knowledge of this interprocess communication.

My first foray into the field was to use semaphores to flag processes to run at the proper time. Later I needed to use pipes for a front-end in communication to SNA. Again I found IPC's could help inform and control processes that were in canned packages and not accessible any other way. The list of useful tools can go on and on. I also had to find the NT equivalent as it became popular.

UNIX is still out there in many forms and if one is to survive in the field an understanding of interprocess communications is imperative.

The Abbreviated Table of Contents:
Part 1. Introduction
1. Introduction
2. POSIX IPC
3. System V IPC
Part 2. Message Passing
4. Pipes and FIFOs
5. Posix Message Queues
6. System V Message Queues
Part 3. Synchronization
7. Mutexes and Condition Variables
8. Read-Write Locks
9. Record Locking
10. POSIX Semaphores
11. System V Semaphores
Part 4. Shared Memory
12. Shared Memory Introduction
13. POSIX Shared Memory
14. System V Shared Memory
Part 5. Remote Procedure Calls
15. Doors
16. Sun RPC
Epilogue
Appendix A. Performance Measurements
Appendix B. Threads Primer
Appendix C. Miscellaneous Source Code
Appendix D. Solutions to Selected Exercises
Bibliography
Index

One final note is that with systems dispersed globally Remote Procedures Calls are taking precedence in Interprocess communications.


Great book but lacks some vital information for IPC, September 9, 2000
great info about pipe, shared memory. need some more work but overall good to have this book. It is sad that author of this book (GodFather of Unix) is no longer here. I learned very much from having this book. Some improvements have been made from earlier edition. This may not be the first book recommended for beginners.

Great overview of different IPC methods, September 9, 2000
When you first want to learn about IPC on Unix, its a bit hard to know where to start. This book has a great coverage of all the options available with enough information on each one to get you started.

Comprehensive coverage of diff. interprocess comm. methods, August 18, 1999
Covers semaphores, mutexes, read write locks, record locks, message queues, pipes and shared memory with extensive examples in C.

A must have book along with Vol I for anyone dealing with network programming.

Indespensible!, August 13, 1999
I found this book invaluable when having to port POSIX code to a SVR4 system. The examples given are obscure, but useful for a serious systems programmer. Having first referenced several other books for the same material, I found there were no comparisons once I picked up UNPv2. A *must have* reference book for Unix systems programmers!

Good but not thorough., November 5, 1998
I didn't get exactly what I needed out of this book. It's good as a reference, but I think it leaves out some information on different topics. The IPC section is a little skimpy, but then again it's not a book about IPC per se...some of the stuff the way it was written was not any more understandable than a manpage, and often you buy books hoping that they are worded less cryptically than manpages. On the upside, I got most of what I needed out of it.

As always, Stevens is worth every penny., November 2, 1998
Ok, I will admit to be biased. Stevens is a unix programming god. Or mine anyway.

However, I will dare say that again he has improved his previous good work. I felt that he improved and showed a lot more in his second edition of Volume I, and I felt the same way about volume II. While his was HARDLY the first serious book on thread programming that I have read (I also suggest programming with Posix Threads, if it interests you), his was very informative, from both a beginner and advanced standpoint. If you have only one author to buy, this is it.


{end of page}

(Page code from the SEO Tools, Toys, and Packages site)