Advanced UNIX™ Programming
- Advanced UNIX Programming Training Class Summary
-
This course provides in-depth training for software developers on UNIX system programming facilities. With an emphasis on writing portable programs using industry standards such as POSIX, X/Open, and the SUS, programming interfaces to several system services are explained in detail. Students will write and modify many C programs in this class, using system calls and library routines. This course can also be delivered on Linux.
Audience: Application developers who will be writing advanced programs on UNIX.
Prerequisites: Fundamentals of UNIX and C Programming. Strong C programming skills are required for this course.
Class Length: 4 days
- Advanced UNIX Programming Training Class Objectives
-
- Develop the programming skills required to write applications that run on the UNIX operating system.
- Write portable applications using UNIX standards.
- Develop the basic skills required to write network programs using the Berkeley Sockets interface to the TCP/IP protocols.
- Advanced UNIX Programming Training Class Detailed Outline
-
- Course Introduction
- Course Objectives
- Overview
- Suggested References
- UNIX Standards
- Brief History of UNIX
- AT&T and Berkeley UNIX Systems
- Major Vendors
- What is a Standard?
- What is POSIX?
- Other Industry Specs and Standards
- Library vs. System-Level Functions
- Files and Directories
- Basic File Types
- File Descriptors
- The open() and creat() Functions
- Keeping Track of Open Files
- File Table Entries
- The v-node Structure
- The fcntl() Function
- The fcntl() Function – with F_DUPFD Command
- File Attributes
- The access() Function
- link(), unlink(), remove(), and rename() Functions
- Functions to Create, Remove, and Read Directories
- System I/O
- Standard I/O vs system I/O
- System I/O Calls
- File and Record Locking
- Processes
- What is a Process?
- Process Creation and Termination
- Process Memory Layout
- Dynamic Memory Allocation
- Accessing Environment Variables
- Real and Effective User IDs
- Process Management
- The Difference Between Programs and Processes
- The fork() System Function
- Parent and Child
- The exec System Functions
- Current Image and New Image
- The wait() Functions
- The waitpid() Function
- Interpreter files and exec
- Basic Interprocess Communication: Pipes
- Interprocess Communication
- Pipes
- FIFOs
- Signals
- What is a Signal?
- Types of Signals
- Signal Actions
- Blocking Signals from Delivery
- The sigaction() function
- Signal Sets and Operations
- Sending a Signal to Another Process
- Blocking Signals with sigprocmask()
- Scheduling and Waiting for Signals
- Restarting System Calls (SVR4)
- Signals and Reentrancy
- Introduction to Pthreads
- Processes and Threads
- Creating Threads
- Multitasking
- Overview of Thread Architectures
- Processes Versus Threads
- The Pthreads API
- Thread Termination
- Joining Threads
- Detaching Threads
- Passing Arguments to Threads
- Pthreads Synchronization
- The Sharing Problem
- Mutexes
- Creating and Initializing Mutexes
- Using Mutexes
- Additional Synchronization Requirement
- Using Condition Variables
- Overview of Client/Server Programming with Berkeley Sockets
- Designing Applications for a Distributed Environment
- Clients and Servers
- Ports and Services
- Connectionless vs. Connection-Oriented Servers
- Stateless vs. Stateful Servers
- Concurrency Issues
- The Berkeley Sockets API
- Berkeley Sockets
- Data Structures of the Sockets API
- Socket System Calls
- Socket Utility Functions
- TCP Client Design
- Algorithms instead of Details
- Client Architecture
- Generic Client/Server Model – TCP
- The TCP Client Algorithm
- TCP Server Design
- General Concepts
- Iterative Servers
- Concurrent Servers
- Performance Consideration
- An Iterative Server Design
- A Concurrent Server Design
- System V Interprocess Communication
- System V IPC
- Elements Common to msg, shm, and sem Facilities
- The Three System V IPC Facilities
- IPC via Message Queues
- IPC via Shared Memory
- Coordinating the Use of Shared Memory Segments
- Semaphore Sets - semget()
- Semaphore Sets – semctl()
- Semaphore Sets – the semop() call
- Shared Memory Coordination Using Semaphores
- Commands for IPC Facility Handling - ipcs and ipcrm
- Appendix A – Date and Time Functions
- Overview
- Time Representations
- Decoding Calendar Time
- Shorthand Functions – asctime() and ctime()
- Formatting Date and Time Strings
- Process Times
- The Difference Between clock() and times()
- Berkeley High Resolution Timer
- Appendix B – Standard I/O
- Standard I/O Calls to manipulate streams
- Standard I/O Calls which perform character I/O
- Standard I/O Calls which perform string I/O
- Standard I/O Calls Which Perform Formatted I/O
- Standard I/O Calls Which Perform Binary I/O
- Course Introduction