Documentation Home
> STREAMS Programming Guide
STREAMS Programming Guide
Book Information
Preface
Part I Application Programming Interface
Chapter 1 Overview of STREAMS
What Is STREAMS?
STREAMS Definitions
Stream
Stream Head
Module
Driver
Messages
Queues
streamio
Multiplexing
Polling
Flow Control
When to Use STREAMS
How STREAMS Works--Application Interface
Opening a Stream
Closing a Stream
Controlling Data Flow
Simple Stream Example
How STREAMS Works--Kernel-level
Stream Head
Modules
Drivers
Messages
Message Queueing Priority
Queues
Multiplexing
Multithreading
STREAMS in Operation
Service Interfaces
Manipulating Modules
Protocol Portability
Protocol Substitution
Protocol Migration
Module Reusability
Chapter 2 STREAMS Application-Level Components
STREAMS Interfaces
STREAMS System Calls
Action Summary
Opening a STREAMS Device File
Initializing Details
Queueing
Adding and Removing Modules
Closing the Stream
Closing Delay Details
Stream Construction Example
Inserting Modules
Module and Driver Control
Chapter 3 STREAMS Application-Level Mechanisms
Message Handling
Modifying Messages
Message Types
Control of Stream Head Processing
Read Options
Write Options
Message Queueing and Priorities
Controlling Flow and Priorities
Accessing the Service Provider
Closing the Service Provider
Sending Data to the Service Provider
Receiving Data
Input and Output Polling
Synchronous Input and Output
Asynchronous Input and Output
Signals
Extended Signals
Stream as a Controlling Terminal
Job Control
Allocation and Deallocation
Hungup Streams
Hangup Signals
Accessing the Controlling Terminal
Chapter 4 STREAMS Driver and Module Interfaces
System Calls Used
Module and Driver ioctl(2)
General ioctl(2) Processing
I_STR ioctl(2) Processing
Transparent ioctl(2) Processing
I_LIST ioctl(2)
Other ioctl(2) Commands
Message Direction
Flush Handling
Flushing Priority Bands
Chapter 5 STREAMS Administration
Tools Available
Autopush Facility
Application Interface
Administration Tool Description
strace(1M)
strlog(9F)
strqget(9F)
strqset(9F)
strerr(1M)
Chapter 6 Pipes and Queues
Overview of Pipes and FIFOs
Creating and Opening Pipes and FIFOs
Using Pipes and FIFOs
Reading From a Pipe or FIFO
Writing to a Pipe or FIFO
Zero-Length Writes
Atomic Writes
Closing a Pipe or FIFO
Flushing Pipes and FIFOs
Named Streams
Passing File Descriptors
Unique Connections
Part II Kernel Interfaces
Chapter 7 STREAMS Framework -Kernel Level
Overview of Streams in Kernel Space
Stream Head
Kernel-Level Messages
Message Types
Message Structure
Message Linkage
Queued Messages
Shared Data
Sending and Receiving Messages
Message Queues and Message Priority
Queues
queue(9S) Structure
Queue Flags
Using Queue Information
Entry Points
open Routine
close Routine
The put Procedure
service Procedure
qband(9S) Structure
Using qband(9S) Information
Message Processing
Flow Control in Service Procedures
Chapter 8 Messages - Kernel Level
ioctl(2) Processing
Message Allocation and Freeing
Recovering From No Buffers
Releasing Callback Requests
Extended STREAMS Buffers
esballoc(9F) Example
General ioctl(2) Processing
STREAMS ioctl Issues
I_STR ioctl(2) Processing
Transparent ioctls
Transparent ioctl(2) Messages
Transparent ioctl(2) Examples
M_COPYIN Example
M_COPYOUT Example
Bidirectional Transfer Example
I_LIST ioctl(2)Example
Flush Handling
Flushing Priority Bands
Flushing Priority Band
Driver and Module Service Interfaces
Service Interface Library Example
Module Service Interface Example
Declarations
Service Interface Procedure
Message Type Change Rules
Well-known ioctl Interfaces
FIORDCHK
FIONREAD
I_NREAD
Signals
Chapter 9 STREAMS Drivers
STREAMS Device Drivers
Basic Driver
STREAMS Driver Topics
STREAMS Configuration Entry Points
STREAMS Initialization Entry Points
STREAMS Table-Driven Entry Points
STREAMS Queue Processing Entry Points
STREAMS Interrupt Handlers
Driver Unloading
STREAMS Driver Code Samples
Printer Driver Example
Driver Flush Handling
Driver Interrupt
Driver Flow Control
Cloning
Loop-Around Driver
Summary
Answers to Frequently Asked Questions
Chapter 10 Modules
Module Overview
STREAMS Module Configuration
Module Procedures
Filter Module Example
Flow Control
Design Guidelines
htonl(3N) and ntohl(3N)
Answers to Frequently Asked Questions
Chapter 11 Configuration
Configuring STREAMS Drivers and Modules
modlinkage(9S)
modldrv(9S)
modlstrmod(9S)
dev_ops(9S)
cb_ops(9S)
streamtab(9S)
qinit(9S)
Entry Points
pts(7D) example
STREAMS Module Configuration
Compilation
Kernel Loading
Checking Module Type
Tunable Parameters
autopush(1M) Facility
Application Interface
STREAMS Anchors
Anchors and Data Flow
Using Anchors
Chapter 12 MultiThreaded STREAMS
MultiThreaded (MT) STREAMS Overview
MT STREAMS Framework
STREAMS Framework Integrity
Message Ordering
MT Configurations
MT SAFE modules
MT UNSAFE Modules
Preparing to Port
Porting to the SunOS 5 System
MT SAFE Modules
MT STREAMS Perimeters
Perimeter options
MT Configuration
qprocson(9F)/qprocsoff(9F)
qtimeout(9F)/qunbufcall(9F)
qwriter(9F)
qwait(9F)
Asynchronous Callbacks
Close Race Conditions
Module Unloading and esballoc(9F)
Use of q_next
MT SAFE Modules Using Explicit Locks
Constraints When Using Locks
Preserving Message Ordering
Sample Multithreaded Device Driver
Sample Multithreaded Module with Outer Perimeter
Chapter 13 Multiplexing
Overview of Multiplexing
Building a Multiplexer
Dismantling a Multiplexer
Routing Data Through a Multiplexer
Connecting And Disconnecting Lower Streams
Connecting Lower Streams
Disconnecting Lower Streams
Multiplexer Construction Example
Multiplexing Driver
Upper Write Put Procedure
Upper Write service Procedure
Lower Write service Procedure
Lower Read put Procedure
Persistent Links
Design Guidelines
Part III Advanced Topics
Chapter 14 STREAMS-Based Terminal Subsystem
Overview of Terminal Subsystem
Master Driver and Slave Driver Characteristics
Line-Discipline Module
Default Settings
User-Configurable Settings
Open and Close Routines
Read-Side Processing
Write-Side Processing
EUC Handling in ldterm
Hardware Emulation Module
STREAMS-based Pseudo-Terminal Subsystem
Line-Discipline Module
Pseudo-TTY Emulation Module - ptem(7M)
Data Structure
Open and Close Routines
Remote Mode
Packet Mode
Pseudo-TTY Drivers - ptm(7D) and pts(7D)
grantpt(3C)
unlockpt(3C)
ptsname(3C)
Pseudo-TTY Streams
Chapter 15 Debugging
Overview of Debugging Facilities
Kernel Debug Printing
Console Messages
STREAMS Error Logging
Error and Trace Logging
Kernel Examination Tools
crash(1M) Command
adb(1) Command
kadb(1M) Command
Appendix A Message Types
Introduction
Ordinary Messages
M_BREAK
M_CTL
M_DATA
M_DELAY
M_IOCTL
M_PASSFP
M_PROTO
M_RSE
M_SETOPTS
High-Priority Messages
M_COPYIN
M_COPYOUT
M_ERROR
M_FLUSH
M_HANGUP
M_IOCACK
M_IOCDATA
M_IOCNAK
M_PCPROTO
M_PCRSE
M_PCSIG
M_READ
SO_MREADOFF and M_STOP
SO_MREADOFFI and M_STOPI
M_UNHANGUP
Appendix B STREAMS Utilities
Kernel Utility Interface Summary
Appendix C STREAMS F.A.Q.
Glossary
Index
A
B
C
D
E
F
G
H
I
J
L
M
N
O
P
Q
R
S
T
U
W
© 2010, Oracle Corporation and/or its affiliates