UNIX Systems Programming for SVR4

UNIX Systems Programming for SVR4

by David A. Curry

ISBN 10: 1-56592-163-1 / ISBN 13: 9781565921634

O'Reilly & Associates

August 1996

The following are made available for your personal, non-commercial use only. You may cite this document as a bibliographic reference in any works that you are writing. Any commercial use of this document, including printing and distribution to groups of people (such as a classroom) is prohibited without my prior written permission.

Complete text of the book:

Example source code:

From the back cover...

Any program worth its salt uses operating system services. Even the simplest program is likely to read input and produce output, and most real-world applications have more complex needs. They need to check the date and time, use the network, or start and communicate with other processes. "Systems programming" really means nothing more than writing software that uses these operating system services.

UNIX Systems Programming for SVR4 gives you the nitty gritty details on how UNIX interacts with applications. Whether you're a student, system administrator, or software developer, if you're working on any System V Release 4 platform, you'll find this book indispensable. The book contains many extended examples on topics ranging from string manipulation to network programming. These examples can serve as starting points for your own applications.

In addition to AT&T's release of SVR4, this book pays special attention to the three most important commercial UNIX implementations: Sun Microsystems' Solaris, Hewlett Packard's HP-UX 10, and Silicon Graphics' IRIX 5.3. It also includes notes on porting software from BSD UNIX to SVR4.

Topics covered include:

  • Working with low-level I/O routines and the standard I/O library
  • Creating and deleting files and directories, changing file attributes, processing multiple input streams, file and record locking, and memory-mapped files
  • Reading printing, and setting the system time and date
  • Determining who is logged in, when users log in and out, how to change a program's effective user ID or group ID, and how to write set-user-id programs
  • Changing system configuration parameters for resource limits
  • Creating processes, job control, and signal handling
  • Using pipes, FIFOs, UNIX-domain sockets, message queues, semaphores, and shared memory for interprocess communication
  • Reading and setting serial line characteristics including baud rate, echoing, and flow control
  • Network programming with Berkeley sockets and the Transport Layer Interface (TLI)

Table of Contents


Chapter 1 Introduction to SVR4

Standards Compliance

Notes on Compilers

The BSD Source Compatibility Package

Chapter 2 Utility Routines

Manipulating Character Strings

Manipulating Byte Strings

Manipulating Character Classes

Dynamic Memory Allocation

Manipulating Temporary Files

Parsing Command-Line Arguments

Miscellaneous Functions

Chapter Summary

Chapter 3 Low-Level I/O Routines

File Descriptors

Opening and Closing Files

Input and Output

Repositioning the Read/Write Offset

Duplicating File Descriptors

Chapter Summary

Chapter 4 The Standard I/O Library

Data Types and Constants

Opening and Closing Files

Character-Based Input and Output

Line-Based Input and Output

Buffer-Based Input and Output

Formatted Input and Output

Repositioning the Read/Write Offset

Reassigning a File Pointer


Stream Status

File Pointers and File Descriptors

Chapter Summary

Chapter 5 Files and Directories

Filesystem Concepts

The UNIX Filesystem

Obtaining File Attributes

Changing File Attributes

Creating and Deleting Files and Directories

Working with Directories

Chapter Summary

Chapter 6 Special-Purpose File Operations

File Descriptor Attributes

Managing Multiple File Descriptors

File and Record Locking

Memory-Mapped Files

The /dev/fd Filesystem

Miscellaneous Functions

Chapter Summary

Chapter 7 Time of Day Operations

The Complexities of Time

Obtaining the Current Time

Obtaining the Local Time Zone

Converting Between UNIX Time and Human Time

Formatting Date Strings

Chapter Summary

Chapter 8 Users and Groups

Login Names

The User ID Number

The Group ID Number

The Password File

The Shadow Password File

The Group File

The utmp and wtmp Files

The Lastlog File

The Shells File

Writing Set-User-Id and Set-Group-Id Programs

Chapter Summary

Chapter 9 System Configuration and Resource Limits

General System Information

System Resource Liimts

Process Resource Limits

Resource Utilization Information

Chapter Summary

Chapter 10 Signals

Signal Concepts

Basic Signal Handling

Unreliable Signals

Reliable Signals

Signals and System Calls

Using Signals for Timeouts

Advanced Signal Handling

Porting Berkeley Signals to SVR4

Chapter Summary

Chapter 11 Processes

Process Concepts

Program Termination

Simple Program Execution

Advanced Program Execution

Redirecting Input and Output

Job Control

Timing Process Execution

Porting Notes

Chapter Summary

Chapter 12 Terminals

Overview of Terminal I/O

Terminal-Related Functions

POSIX Terminal Control

Pre-POSIX Terminal Control

Terminal Window Size

Chapter Summary

Chapter 13 Interprocess Communication



UNIX-Domain Sockets

System V IPC Functions

Chapter Summary

Chapter 14 Networking with Sockets

Networking Concepts

Creating a Socket

Server-Side Functions

Client-Side Functions

Putting It All Together

Other Functions

Chapter Summary

Chapter 15 Networking with TLI

The netbuf Structure

Network Selection

Name-to-Address Translation

TLI Utility Functions

Transport Endpoint Management

Connectionless Service

Connection-Oriented Service

Other Functions

Using read and write with TLI

Chapter Summary

Chapter 16 Miscellaneous Routines

Exiting When Errors Occur

Error Logging



Environment Variables


Random Numbers

Directory Trees

Database Management

Pattern Matching


Chapter Summary

Appendix A Significant Changes in ANSI C

Appendix B Accessing Filesystem Data Structures

Appendix C The /proc Filesystem

Appendix D Pseudo-Terminals

Appendix E Accessing the Network at the Link Level