putmsg(2) 맨 페이지 - 윈디하나의 솔라나라

개요

섹션
맨 페이지 이름
검색(S)

putmsg(2)

putmsg(2)                        System Calls                        putmsg(2)

NAME
       putmsg, putpmsg - send a message on a stream

SYNOPSIS
       #include <stropts.h>

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


       int putpmsg(int fildes, const struct strbuf *ctlptr,
            const struct strbuf *dataptr,int band, int flags);

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


       The putpmsg() function does the same thing as  putmsg(),  but  provides
       the  user the ability to send messages in different priority bands. Ex‐
       cept where noted, all information pertaining to putmsg() also  pertains
       to putpmsg().


       The  fildes  argument  specifies  a file descriptor referencing an open
       stream. The ctlptr and dataptr arguments each point to a strbuf  struc‐
       ture, which contains the following members:

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



       The  ctlptr  argument  points  to  the structure describing the control
       part, if any, to be included in the message. The buf member in the str‐
       buf structure points to the buffer where the  control  information  re‐
       sides, and the len member indicates the number of bytes to be sent. The
       maxlen  member  is  not  used in putmsg() (see getmsg(2)). In a similar
       manner, dataptr specifies the data, if any, to be included in the  mes‐
       sage.  The flags argument indicates what type of message should be sent
       and is described later.


       To send the data part of a message, dataptr is not NULL,  and  the  len
       member of dataptr has a value of 0 or greater. To send the control part
       of  a  message,  the  corresponding  values are set for ctlptr. No data
       (control) part is sent if either dataptr (ctlptr) is NULL  or  the  len
       member of dataptr (ctlptr) is negative.


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


       The stream head guarantees that the control part of a message generated
       by putmsg() is at least 64 bytes in length.


       For putpmsg(), the flags are different. The flags argument is a bitmask
       with  the  following  mutually-exclusive  flags  defined: MSG_HIPRI and
       MSG_BAND. If flags is set to 0, putpmsg() fails and sets errno to  EIN‐
       VAL.  If  a control part is specified and flags is set to MSG_HIPRI and
       band is set to 0, a high-priority message is sent. If flags is  set  to
       MSG_HIPRI  and  either no control part is specified or band is set to a
       non-zero value, putpmsg() fails and sets errno to EINVAL. If  flags  is
       set  to MSG_BAND, then a message is sent in the priority band specified
       by band. If a control part and data part are not specified and flags is
       set to MSG_BAND, no message is sent and 0 is returned.


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


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

RETURN VALUES
       Upon successful completion, 0 is returned. Otherwise,  −1  is  returned
       and errno is set to indicate the error.

ERRORS
       The putmsg() and putpmsg() functions will fail if:

       EADI            The  user-specified  buffer for the data part of a mes‐
                       sage is enabled for ADI, and an ADI version mismatch is
                       detected while the system reads data from  the  buffer.
                       For more information, see the adi(3C) man page.


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


       EBADF           The fildes argument is not a valid file descriptor open
                       for writing.


       EFAULT          The ctlptr or dataptr argument points to an illegal ad‐
                       dress.


       EINTR           A signal is caught during the execution of the putmsg()
                       function.


       EINVAL          An  undefined value is specified in flags; flags is set
                       to RS_HIPRI and no control part was  supplied;  or  the
                       stream  referenced  by  fildes is linked below a multi‐
                       plexor.


       ENOSR           Buffers are not allocated for the message that are  not
                       to  be  created  due to insufficient streams memory re‐
                       sources.


       ENOSTR          The fildes argument is not associated with a stream.


       ENXIO           A hangup condition  is  generated  downstream  for  the
                       specified  stream,  or  the  other  end  of the pipe is
                       closed.


       EPIPE or EIO    The fildes argument refers to a streams-based pipe  and
                       the  other  end of the pipe is closed. A SIGPIPE signal
                       is generated for the calling thread. This error  condi‐
                       tion  occurs only with SUS-conforming applications. See
                       standards(7).


       ERANGE          The size of the data part of the message is not  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.



       In addition, putmsg()  and  putpmsg()  fail  if  the  stream  head  has
       processed  an  asynchronous  error  before  the call. In this case, the
       value of errno does not reflect the result of  putmsg()  or  putpmsg(),
       but reflects the prior error.


       The putpmsg() function will fail if:

       EINVAL    The flags argument is set to MSG_HIPRI and band is non-zero.


ATTRIBUTES
       See attributes(7) for descriptions of the following attributes:

       tab()  box; cw(2.75i) |cw(2.75i) lw(2.75i) |lw(2.75i) ATTRIBUTE TYPEAT‐
       TRIBUTE  VALUE  _  Interface  StabilityCommitted  _  StandardSee  stan‐
       dards(7).


SEE ALSO
       getmsg(2),  Intro(2),  poll(2), read(2), write(2), attributes(7), stan‐
       dards(7)


       STREAMS Programming Guide

HISTORY
       The putmsg() function has been included in all Sun and Oracle  releases
       of Solaris.


       The  putpmsg()  function has been included in Solaris since the Solaris
       2.0 release.

Oracle Solaris 11.4               30 Jan 2023                        putmsg(2)
맨 페이지 내용의 저작권은 맨 페이지 작성자에게 있습니다.
RSS ATOM XHTML 5 CSS3