Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

intro(2)

read(2)

getmsg(2)

poll(2)

write(2)



  putmsg(2)                           CLIX                           putmsg(2)



  NAME

    putmsg - Sends a message on a stream

  LIBRARY

    Standard C Library (libc.a)

  SYNOPSIS

    #include <stropts.h>

    int putmsg(
      int fd ,
      struct strbuf *ctlptr ,
      struct strbuf *dataptr ,
      int flags );

  PARAMETERS

    fd        Specifies a file descriptor that references an open STREAMS
              device.

    ctlptr    Points to a structure that contains the control part of the
              message.

    dataptr   Points to a structure that contains the data part of the
              message.

    flags     Specifies the priority of the message.

  DESCRIPTION

    The putmsg() function creates a message (see the intro() function)  from
    user specified buffers and sends the message to a STREAMS file.  The
    message may contain either a data part, a control part or both.  The data
    and control parts to be sent are distinguished by placement in separate
    buffers, as described below.  The semantics of each part is defined by the
    STREAMS module that receives the message.

    The fd parameter specifies a file descriptor referencing an open stream.
    The ctlptr and dataptr parameters each point to a strbuf structure
    containing the following members:

    int maxlen;    /* not used */
    int len;       /* length of data */
    char *buf;     /* ptr to buffer */

    The ctlptr parameter points to the structure describing the control part,
    if any, to be included in the message.  The buf member in the strbuf
    structure points to the buffer where the control information resides, and



  2/94 - Intergraph Corporation                                              1






  putmsg(2)                           CLIX                           putmsg(2)



    the len member indicates the number of bytes to be sent.  The maxlen
    member is not used in putmsg().  (See the getmsg() function.)  In a
    similar manner, dataptr specifies the data, if any, to be included in the
    message.  The value of flags may be set to the values 0 or RS_HIPRI and is
    used as described below.

    To send the data part of a message, dataptr must be non-null and the len
    member of dataptr must have a value of 0 or greater.  To send the control
    part of a message, the corresponding values must be set for ctlptr.  No
    data (control) part will be sent if either dataptr (ctlptr) is NULL or the
    len member of dataptr (ctlptr) is set to -1.

    If a control part is specified, and flags is set to RS_HIPRI, a priority
    message is sent.  If flags is set to 0, a non-priority message is sent.
    If no control part is specified and flags is set to RS_HIPRI, putmsg()
    fails and sets errno to EINVAL.  If no control part and no data part are
    specified and flags is set to 0, no message is sent and 0 is returned.

    For non-priority messages, putmsg() will block if the stream write queue
    is full due to internal flow control conditions.  For priority messages,
    putmsg() does not block on this condition.  For non-priority messages,
    putmsg() does not block when the write queue is full and O_NDELAY is set.
    Instead, it fails and sets errno to EAGAIN.

    The putmsg() function also blocks, unless prevented by lack of internal
    resources, waiting for the availability of message blocks in the stream.
    The blocking occurs regardless of priority or whether O_NDELAY has been
    specified.  No partial message is sent.

  EXAMPLES

    To send a high priority message:

    if (putmsg(fd, ctlptr, dataptr, RS_HIPRI) == -1)
         perror("Putmsg failed");


  RETURN VALUES

    Upon successful completion, a value of 0 is returned.  Otherwise, a value
    of -1 is returned and errno is set to indicate the error.

  ERRORS

    The putmsg() function fails if one or more of the following are true:

    [EAGAIN]   A non-priority message was specified, the O_NDELAY flag is set
               and the stream write queue is full due to internal flow control
               conditions.

    [EAGAIN]   Buffers could not be allocated for the message that was to be



  2                                              Intergraph Corporation - 2/94






  putmsg(2)                           CLIX                           putmsg(2)



               created.

    [EBADF]    The value of fd does not represent a valid file descriptor open
               for writing.

    [EFAULT]   The ctlptr or dataptr parameter points outside the allocated
               address space.

    [EINTR]    A signal was caught during the putmsg() function.

    [EINVAL]   An undefined value was specified in flags, or flags is set to
               RS_HIPRI and no control part was supplied.

    [EINVAL]   The stream referenced by fd is linked below a multiplexor.

    [ENOSTR]   A stream is not associated with fd.

    [ENXIO]    A hangup condition was generated downstream for the specified
               stream.

    [ERANGE]   The size of the data part of the message does not fall within
               the range specified by the maximum and minimum packet sizes of
               the topmost stream module.  This value is also returned if the
               control part of the message is larger than the maximum
               configured size of the control part of a message, or if the
               data part of a message is larger than the maximum configured
               size of the data part of a message.

    The putmsg() function also fails if a STREAMS error message had been
    processed by the stream head before the call to putmsg().  The error
    returned is the value contained in the STREAMS error message.

  RELATED INFORMATION

    Functions:  intro(2), read(2), getmsg(2), poll(2), write(2)

    AT&T UNIX System V STREAMS Primer, AT&T UNIX System V STREAMS Programmer's
    Guide
















  2/94 - Intergraph Corporation                                              3




Typewritten Software • bear@typewritten.org • Edmonds, WA 98026