PUTCTL(9F) Kernel Functions for Drivers PUTCTL(9F)
NAME
putctl - send a control message to a queue
SYNOPSIS
#include <sys/stream.h>
int putctl(
queue_t *q,
int type);
INTERFACE LEVEL
Architecture independent level 1 (DDI/DKI).
PARAMETERS
q Queue to which the message is to be sent.
type Message type (must be control, not data type).
DESCRIPTION
The
putctl() function tests the
type argument to make sure a data
type has not been specified, and then attempts to allocate a message
block.
putctl() fails if
type is
M_DATA,
M_PROTO, or
M_PCPROTO, or
if a message block cannot be allocated. If successful,
putctl() calls
the
put(9E) routine of the queue pointed to by
q with the newly
allocated and initialized messages.
RETURN VALUES
On success,
1 is returned. If
type is a data type, or if a message
block cannot be allocated,
0 is returned.
CONTEXT
The
putctl() function can be called from user, interrupt, or kernel
context.
EXAMPLES
Example 1: Using putctl()
The
send_ctl() routine is used to pass control messages downstream.
M_BREAK messages are handled with
putctl() (line 11).
putctl1(9F) (line 16) is used for
M_DELAY messages, so that
parm can be used to
specify the length of the delay. In either case, if a message block
cannot be allocated a variable recording the number of allocation
failures is incremented (lines 12, 17). If an invalid message type is
detected,
cmn_err(9F) panics the system (line 21).
1 void
2 send_ctl(wrq, type, parm)
3 queue_t *wrq;
4 uchar_t type;
5 uchar_t parm;
6 {
7 extern int num_alloc_fail;
8
9 switch (type) {
10 case M_BREAK:
11 if (!putctl(wrq->q_next, M_BREAK))
12 num_alloc_fail++;
13 break;
14
15 case M_DELAY:
16 if (!putctl1(wrq->q_next, M_DELAY, parm))
17 num_alloc_fail++;
18 break;
19
20 default:
21 cmn_err(CE_PANIC, "send_ctl: bad message type passed");
22 break;
23 }
24 }
SEE ALSO
put(9E),
cmn_err(9F),
datamsg(9F),
putctl1(9F),
putnextctl(9F) Writing Device Drivers STREAMS Programming Guide January 16, 2006 PUTCTL(9F)