MyWebUniversity.com Home Page
 



OpenSolaris man pages main menu


Ioctl Requests                                       streamio(7I)



NAME
     streamio - STREAMS ioctl commands

SYNOPSIS
     #include 
     #include 
     #include 

     int ioctl(int fildes, int command, ... /*arg*/);


DESCRIPTION
     STREAMS (see Intro(3)) ioctl commands are a  subset  of  the
     ioctl(2) commands and perform a variety of control functions
     on streams.


     The fildes argument is an open file descriptor  that  refers
     to  a  stream.   The command argument determines the control
     function to be performed as described below. The  arg  argu-
     ment  represents  additional  information  that is needed by
     this command. The type of arg depends upon the command,  but
     it  is  generally  an  integer  or  a  pointer to a command-
     specific data structure.  The command and arg arguments  are
     interpreted  by  the  STREAM  head.  Certain combinations of
     these arguments may be passed to a module or driver  in  the
     stream.


     Since these STREAMS commands are ioctls, they are subject to
     the  errors  described  in  ioctl(2).  In  addition to those
     errors, the call will fail with errno set to EINVAL, without
     processing  a  control function, if the STREAM referenced by
     fildes is linked below a multiplexor, or if command is not a
     valid value for a stream.


     Also, as described in ioctl(2), STREAMS modules and  drivers
     can  detect errors. In this case, the module or driver sends
     an error message to the  STREAM  head  containing  an  error
     value.  This  causes subsequent calls to fail with errno set
     to this value.

IOCTLS
     The following ioctl commands, with error  values  indicated,
     are applicable to all STREAMS files:

     IPUSH         Pushes the module whose name is pointed to by
                    arg  onto the top of the current stream, just
                    below the STREAM head. If  the  STREAM  is  a
                    pipe, the module will be inserted between the
                    stream heads of both ends  of  the  pipe.  It



SunOS 5.11          Last change: 17 Nov 2005                    1






Ioctl Requests                                       streamio(7I)



                    then  calls  the  open  routine of the newly-
                    pushed module. On failure, errno  is  set  to
                    one of the following values:

                    EINVAL     Invalid module name.


                    EFAULT     arg points outside  the  allocated
                               address space.


                    ENXIO      Open routine of new module failed.


                    ENXIO      Hangup received on fildes.


                    ENOTSUP    Pushing a module is not  supported
                               on this stream.



     IPOP          Removes the module just below the STREAM head
                    of the STREAM pointed to by fildes. To remove
                    a module from a pipe requires that the module
                    was  pushed  on  the side it is being removed
                    from. arg should be  0 in an  IPOP  request.
                    On  failure,  errno is set to one of the fol-
                    lowing values:

                    EINVAL     No module present in the stream.


                    ENXIO      Hangup received on fildes.


                    EPERM      Attempt to pop through  an  anchor
                               by an unprivileged process.


                    ENOTSUP    Removal is not supported.



     IANCHOR       Positions the stream  anchor  to  be  at  the
                    STREAMS  module  directly  below  the  STREAM
                    head.  Once  this  has  been  done,  only   a
                    privileged  process may pop modules below the
                    anchor on the stream. arg must  be  0  in  an
                    IANCHOR request. On failure, errno is set to
                    the following value:




SunOS 5.11          Last change: 17 Nov 2005                    2






Ioctl Requests                                       streamio(7I)



                    EINVAL    Request to put an anchor on a pipe.



     ILOK         Retrieves the name of the module  just  below
                    the  STREAM  head of the STREAM pointed to by
                    fildes, and places it in  a  null  terminated
                    character  string  pointed  at  by  arg.  The
                    buffer pointed to by arg should be  at  least
                    FMNAMESZ]1  bytes  long.  This  requires  the
                    declaration   #include    .    On
                    failure, errno is set to one of the following
                    values:

                    EFAULT    arg points  outside  the  allocated
                              address space.


                    EINVAL    No module present in stream.



     IFLUSH        This request flushes all input and/or  output
                    queues,  depending on the value of arg. Legal
                    arg values are:

                    FLUSHR     Flush read queues.


                    FLUSHW     Flush write queues.


                    FLUSHRW    Flush read and write queues.

                    If a pipe or FIFO does not have  any  modules
                    pushed,  the read queue of the STREAM head on
                    either end is flushed depending on the  value
                    of arg.

                    If FLUSHR is set and fildes is  a  pipe,  the
                    read  queue  for  that  end  of  the  pipe is
                    flushed and the write queue for the other end
                    is  flushed. If fildes is a FIFO, both queues
                    are flushed.

                    If FLUSHW is set and fildes is a pipe and the
                    other  end of the pipe exists, the read queue
                    for the other end of the pipe is flushed  and
                    the  write  queue for this end is flushed. If
                    fildes is a FIFO, both queues of the FIFO are
                    flushed.




SunOS 5.11          Last change: 17 Nov 2005                    3






Ioctl Requests                                       streamio(7I)



                    If  FLUSHRW  is  set,  all  read  queues  are
                    flushed, that is, the read queue for the FIFO
                    and the read queue on both ends of  the  pipe
                    are flushed.

                    Correct flush handling of a pipe or FIFO with
                    modules  pushed  is  achieved via the pipemod
                    module.  This  module  should  be  the  first
                    module  pushed  onto  a pipe so that it is at
                    the midpoint of the pipe itself.

                    On failure, errno is set to one of  the  fol-
                    lowing values:

                    ENOSR     Unable  to  allocate  buffers   for
                              flush  message  due to insufficient
                              STREAMS memory resources.


                    EINVAL    Invalid arg value.


                    ENXIO     Hangup received on fildes.



     IFLUSHBAND    Flushes a particular band  of  messages.  arg
                    points  to  a bandinfo structure that has the
                    following members:

                      unsigned char bipri;
                      int biflag;

                    The biflag  field  may  be  one  of  FLUSHR,
                    FLUSHW, or FLUSHRW as described earlier.


     ISETSIG       Informs the STREAM head that the user  wishes
                    the  kernel  to issue the SIGPOL signal (see
                    signal(3C))  when  a  particular  event   has
                    occurred   on   the  STREAM  associated  with
                    fildes.  ISETSIG  supports  an  asynchronous
                    processing  capability  in STREAMS. The value
                    of arg is a bitmask that specifies the events
                    for  which the user should be signaled. It is
                    the bitwise OR of any combination of the fol-
                    lowing constants:

                    SINPUT      Any  message   other   than   an
                                 MPCPROTO   has   arrived  on  a
                                 STREAM  head  read  queue.  This
                                 event    is    maintained    for



SunOS 5.11          Last change: 17 Nov 2005                    4






Ioctl Requests                                       streamio(7I)



                                 compatibility   with    previous
                                 releases.  This  event  is trig-
                                 gered even if the message is  of
                                 zero length.


                    SRDNORM     An ordinary (non-priority)  mes-
                                 sage  has  arrived  on  a STREAM
                                 head read queue. This  event  is
                                 triggered even if the message is
                                 of zero length.


                    SRDBAND     A priority band message (band  >
                                 0)  has arrived on a stream head
                                 read queue. This event is  trig-
                                 gered  even if the message is of
                                 zero length.


                    SHIPRI      A  high  priority   message   is
                                 present  on the STREAM head read
                                 queue. This event  is  triggered
                                 even  if  the message is of zero
                                 length.


                    SOUTPUT     The write queue just  below  the
                                 STREAM  head  is no longer full.
                                 This  notifies  the  user   that
                                 there  is  room on the queue for
                                 sending (or writing) data  down-
                                 stream.


                    SWRNORM     This  event  is  the   same   as
                                 SOUTPUT.


                    SWRBAND     A priority band greater  than  0
                                 of a queue downstream exists and
                                 is writable.  This notifies  the
                                 user  that  there is room on the
                                 queue for sending  (or  writing)
                                 priority data downstream.


                    SMSG        A STREAMS  signal  message  that
                                 contains  the SIGPOL signal has
                                 reached the front of the  STREAM
                                 head read queue.




SunOS 5.11          Last change: 17 Nov 2005                    5






Ioctl Requests                                       streamio(7I)



                    SEROR      An MEROR message  has  reached
                                 the STREAM head.


                    SHANGUP     An MHANGUP message has  reached
                                 the STREAM head.


                    SBANDURG    When used  in  conjunction  with
                                 SRDBAND,  SIGURG  is  generated
                                 instead of SIGPOL when a prior-
                                 ity message reaches the front of
                                 the stream head read queue.

                    A user process may choose to be signaled only
                    of  high priority messages by setting the arg
                    bitmask to the value SHIPRI.

                    Processes that wish to receive  SIGPOL  sig-
                    nals must explicitly register to receive them
                    using ISETSIG. If several processes register
                    to  receive this signal for the same event on
                    the same stream, each process  will  be  sig-
                    naled when the event occurs.

                    If the value of arg is zero, the calling pro-
                    cess   will  be  unregistered  and  will  not
                    receive further SIGPOL signals.  On failure,
                    errno is set to one of the following values:

                    EINVAL    arg value is invalid or arg is zero
                              and  process  is  not registered to
                              receive the SIGPOL signal.


                    EAGAIN    Allocation of a data  structure  to
                              store the signal request failed.



     IGETSIG       Returns the events for which the calling pro-
                    cess  is  currently  registered  to be sent a
                    SIGPOL signal.  The events are returned as a
                    bitmask  pointed  to by arg, where the events
                    are those specified  in  the  description  of
                    ISETSIG  above.  On failure, errno is set to
                    one of the following values:

                    EINVAL    Process not registered  to  receive
                              the SIGPOL signal.





SunOS 5.11          Last change: 17 Nov 2005                    6






Ioctl Requests                                       streamio(7I)



                    EFAULT    arg points  outside  the  allocated
                              address space.



     IFIND         Compares the names of all  modules  currently
                    present  in the STREAM to the name pointed to
                    by arg, and returns 1 if the named module  is
                    present  in  the  stream. It returns 0 if the
                    named module  is  not  present.  On  failure,
                    errno is set to one of the following values:

                    EFAULT    arg points  outside  the  allocated
                              address space.


                    EINVAL    arg does not contain a valid module
                              name.



     IPEK         Allows a user to retrieve the information  in
                    the  first  message  on  the STREAM head read
                    queue without  taking  the  message  off  the
                    queue.   IPEK  is  analogous  to  getmsg(2)
                    except that it does not  remove  the  message
                    from  the  queue.  arg  points  to  a strpeek
                    structure,  which  contains   the   following
                    members:

                      struct strbuf ctlbuf;
                      struct strbuf  databuf;
                      long flags;

                    The maxlen field in the  ctlbuf  and  databuf
                    strbuf structures (see getmsg(2)) must be set
                    to the number of bytes of control information
                    and/or  data  information,  respectively,  to
                    retrieve. flags may be set to RSHIPRI or  0.
                    If  RSHIPRI  is  set, IPEK will look for a
                    high priority message on the STREAM head read
                    queue.  Otherwise,  IPEK  will look for the
                    first message on the STREAM head read queue.

                    IPEK returns 1 if a message was  retrieved,
                    and  returns 0 if no message was found on the
                    STREAM head read queue. It does not wait  for
                    a message to arrive. On return, ctlbuf speci-
                    fies information in the control buffer, data-
                    buf specifies information in the data buffer,
                    and flags contains the value RSHIPRI  or  0.
                    On  failure,  errno  is  set to the following



SunOS 5.11          Last change: 17 Nov 2005                    7






Ioctl Requests                                       streamio(7I)



                    value:

                    EFAULT     arg points,  or  the  buffer  area
                               specified in ctlbuf or databuf is,
                               outside  the   allocated   address
                               space.


                    EBADMSG    Queued message to be read  is  not
                               valid for IPEK.


                    EINVAL     Illegal value for flags.


                    ENOSR      Unable to allocate buffers to per-
                               form  the  IPEK  due to insuffi-
                               cient STREAMS  memory resources.



     ISRDOPT       Sets the read mode (see  read(2))  using  the
                    value  of  the argument arg. Legal arg values
                    are:

                    RNORM    Byte-stream mode, the default.


                    RMSGD    Message-discard mode.


                    RMSGN    Message-nondiscard mode.

                    In addition, the STREAM head's  treatment  of
                    control  messages  may  be changed by setting
                    the following flags in arg:

                    RPROTNORM    Reject read() with EBADMSG if  a
                                 control  message is at the front
                                 of the STREAM head read queue.


                    RPROTDAT     Deliver the control portion of a
                                 message  as  data  when  a  user
                                 issues  read().  This   is   the
                                 default behavior.


                    RPROTDIS     Discard the control portion of a
                                 message,   delivering  any  data
                                 portion, when a  user  issues  a
                                 read().



SunOS 5.11          Last change: 17 Nov 2005                    8






Ioctl Requests                                       streamio(7I)



                    On failure, errno is  set  to  the  following
                    value:

                    EINVAL    arg is not one of the  above  legal
                              values,   or  arg  is  the  bitwise
                              inclusive OR of RMSGD and RMSGN.



     IGRDOPT       Returns the current read mode setting  in  an
                    int  pointed  to  by  the  argument arg. Read
                    modes are described in  read().  On  failure,
                    errno is set to the following value:

                    EFAULT    arg points  outside  the  allocated
                              address space.



     INREAD        Counts the  number  of  data  bytes  in  data
                    blocks  in  the  first  message on the STREAM
                    head read queue, and places this value in the
                    location  pointed to by arg. The return value
                    for the command is the number of messages  on
                    the  STREAM  head read queue. For example, if
                    zero is returned in arg, but the ioctl return
                    value  is  greater  than zero, this indicates
                    that a zero-length message  is  next  on  the
                    queue.  On  failure, errno is set to the fol-
                    lowing value:

                    EFAULT    arg points  outside  the  allocated
                              address space.



     IFDINSERT     Creates a message from  specified  buffer(s),
                    adds  information  about  another  STREAM and
                    sends the  message  downstream.  The  message
                    contains  a control part and an optional data
                    part. The data and control parts to  be  sent
                    are  distinguished  by  placement in separate
                    buffers, as described below.

                    The arg  argument  points  to  a  strfdinsert
                    structure,   which   contains  the  following
                    members:

                      struct  strbuf  ctlbuf;
                      struct  strbuf databuf;
                      tuscalart  flags;
                      int  fildes;



SunOS 5.11          Last change: 17 Nov 2005                    9






Ioctl Requests                                       streamio(7I)



                      int  offset;

                    The len member in the ctlbuf strbuf structure
                    (see  putmsg(2)) must be set to the size of a
                    tuscalart plus the number of bytes of  con-
                    trol information to be sent with the message.
                    The fildes member specifies the file descrip-
                    tor  of  the  other  STREAM,  and  the offset
                    member, which must be  suitably  aligned  for
                    use  as  a  tuscalart, specifies the offset
                    from the start of the  control  buffer  where
                    IFDINSERT  will  store  a  tuscalart whose
                    interpretation is specific to the STREAM end.
                    The  len  member in the databuf strbuf struc-
                    ture must be set to the number  of  bytes  of
                    data information to be sent with the message,
                    or to 0 if no data part is to be sent.

                    The flags member specifies the type  of  mes-
                    sage  to  be  created.  A  normal  message is
                    created if flags is set to  0,  and  a  high-
                    priority  message  is created if flags is set
                    to  RSHIPRI.  For   non-priority   messages,
                    IFDINSERT  will  block  if  the STREAM write
                    queue is full due to  internal  flow  control
                    conditions.     For     priority    messages,
                    IFDINSERT does not block on this  condition.
                    For  non-priority  messages,  IFDINSERT does
                    not block when the write queue  is  full  and
                    ONDELAY  or   ONONBLOCK is set. Instead, it
                    fails and sets errno to EAGAIN.

                    IFDINSERT also blocks, unless  prevented  by
                    lack  of  internal resources, waiting for the
                    availability of message blocks in the STREAM,
                    regardless of priority or whether ONDELAY or
                    ONONBLOCK has  been  specified.  No  partial
                    message is sent.

                    The ioctl() function with the IFDINSERT com-
                    mand will fail if:

                    EAGAIN    A non-priority  message  is  speci-
                              fied,  the  ONDELAY  or ONONBLOCK
                              flag is set, and the  STREAM  write
                              queue  is full due to internal flow
                              control conditions.


                    ENOSR     Buffers can not  be  allocated  for
                              the message that is to be created.




SunOS 5.11          Last change: 17 Nov 2005                   10






Ioctl Requests                                       streamio(7I)



                    EFAULT    The arg  argument  points,  or  the
                              buffer  area specified in ctlbuf or
                              databuf is, outside  the  allocated
                              address space.


                    EINVAL    One of the  following:  The  fildes
                              member of the strfdinsert structure
                              is not a valid,  open  STREAM  file
                              descriptor;    the    size   of   a
                              tuscalart plus offset is  greater
                              than  the len member for the buffer
                              specified   through   ctlptr;   the
                              offset  member  does  not specify a
                              properly-aligned  location  in  the
                              data  buffer; or an undefined value
                              is stored in flags.


                    ENXIO     Hangup received on the fildes argu-
                              ment  of  the  ioctl  call  or  the
                              fildes member  of  the  strfdinsert
                              structure.


                    ERANGE    The len field for the buffer speci-
                              fied  through databuf does not fall
                              within the range specified  by  the
                              maximum and minimum packet sizes of
                              the topmost STREAM module;  or  the
                              len member for the buffer specified
                              through databuf is larger than  the
                              maximum configured size of the data
                              part  of  a  message;  or  the  len
                              member  for  the  buffer  specified
                              through ctlbuf is larger  than  the
                              maximum configured size of the con-
                              trol part of a message.

                    IFDINSERT can also fail if an error  message
                    was received by the STREAM head of the STREAM
                    corresponding to the  fildes  member  of  the
                    strfdinsert  structure.  In  this case, errno
                    will be set to the value in the message.


     ISTR           Constructs an internal STREAMS ioctl message
                    from  the  data  pointed to by arg, and sends
                    that message downstream.

                    This mechanism is provided to send user ioctl
                    requests  to  downstream modules and drivers.



SunOS 5.11          Last change: 17 Nov 2005                   11






Ioctl Requests                                       streamio(7I)



                    It allows information to  be  sent  with  the
                    ioctl, and will return to the user any infor-
                    mation sent upstream by the downstream  reci-
                    pient. ISTR blocks until the system responds
                    with  either  a  positive  or  negative  ack-
                    nowledgement  message,  or  until the request
                    "times out" after some period of time. If the
                    request times out, it fails with errno set to
                    ETIME.

                    To send requests downstream, arg  must  point
                    to  a  strioctl  structure which contains the
                    following members:

                      int  iccmd;
                      int  ictimout;
                      int  iclen;
                      char  *icdp;

                    iccmd is the internal ioctl command intended
                    for   a   downstream  module  or  driver  and
                    ictimout is the  number  of  seconds  (-1  =
                    infinite, 0 = use default, >0 = as specified)
                    an ISTR request will wait  for  acknowledge-
                    ment  before timing out. iclen is the number
                    of bytes in the data argument and icdp is  a
                    pointer  to  the  data  argument.  The iclen
                    field has two uses: on input, it contains the
                    length of the data argument passed in, and on
                    return from  the  command,  it  contains  the
                    number  of  bytes  being returned to the user
                    (the buffer pointed to  by  icdp  should  be
                    large enough to contain the maximum amount of
                    data that any module or  the  driver  in  the
                    STREAM can return).

                    At most one ISTR can be active on a  stream.
                    Further  ISTR  calls  will  block  until the
                    active ISTR completes via  a   positive   or
                    negative  acknowlegment,  a  timeout,  or  an
                    error condition at the STREAM head.  By  set-
                    ting   the ictimout  field  to  0, the  user
                    is  requesting  STREAMS   to   provide    the
                    "DEFAULT"  timeout.  The  default  timeout is
                    specific to the  STREAMS  implementation  and
                    may   vary  depending  on  which  release  of
                    Solaris you are using.  For  Solaris  8  (and
                    earlier  versions),  the  default  timeout is
                    fifteen seconds. The ONDELAY and  ONONBLOCK
                    (see  open(2))  flags  have no effect on this
                    call.




SunOS 5.11          Last change: 17 Nov 2005                   12






Ioctl Requests                                       streamio(7I)



                    The STREAM head will convert the  information
                    pointed  to  by  the strioctl structure to an
                    internal ioctl command message  and  send  it
                    downstream.  On  failure, errno is set to one
                    of the following values:

                    ENOSR     Unable to allocate buffers for  the
                              ioctl  message  due to insufficient
                              STREAMS memory resources.


                    EFAULT    Either arg points outside the allo-
                              cated  address space, or the buffer
                              area specified by icdp and  iclen
                              (separately  for data sent and data
                              returned) is outside the  allocated
                              address space.


                    EINVAL    iclen is less than 0 or iclen  is
                              larger  than the maximum configured
                              size of the data part of a  message
                              or ictimout is less than -1.


                    ENXIO     Hangup received on fildes.


                    ETIME     A downstream ioctl timed out before
                              acknowledgement was received.

                    An ISTR can also fail while waiting  for  an
                    acknowledgement  if  a  message indicating an
                    error or a hangup is received at  the  STREAM
                    head.  In  addition,  an  error  code  can be
                    returned in the  positive  or  negative  ack-
                    nowledgement  message, in the event the ioctl
                    command  sent  downstream  fails.  For  these
                    cases,  ISTR will fail with errno set to the
                    value in the message.


     ISWROPT       Sets the write mode using the  value  of  the
                    argument arg. Legal bit settings for arg are:

                    SNDZERO    Send a zero-length  message  down-
                               stream  when  a  write  of 0 bytes
                               occurs.

                    To not send  a  zero-length  message  when  a
                    write of 0 bytes occurs, this bit must not be
                    set in arg.



SunOS 5.11          Last change: 17 Nov 2005                   13






Ioctl Requests                                       streamio(7I)



                    On failure, errno may be set to the following
                    value:

                    EINVAL    arg is not the above legal value.



     IGWROPT       Returns the current write  mode  setting,  as
                    described  above,  in the int that is pointed
                    to by the argument arg.


     ISENDFD       Requests the STREAM associated with fildes to
                    send a message, containing a file pointer, to
                    the stream head at the other end of a  STREAM
                    pipe.  The  file  pointer corresponds to arg,
                    which must be an open file descriptor.

                    ISENDFD converts arg into the  corresponding
                    system  file  pointer. It allocates a message
                    block and inserts the  file  pointer  in  the
                    block.   The  user id and group id associated
                    with the sending process are  also  inserted.
                    This  message  is placed directly on the read
                    queue (see Intro(3)) of the  STREAM  head  at
                    the  other end of the STREAM pipe to which it
                    is connected.  On failure, errno  is  set  to
                    one of the following values:

                    EAGAIN    The sending  STREAM  is  unable  to
                              allocate a message block to contain
                              the file pointer.


                    EAGAIN    The read  queue  of  the  receiving
                              STREAM  head  is  full  and  cannot
                              accept   the   message   sent    by
                              ISENDFD.


                    EBADF     arg  is  not  a  valid,  open  file
                              descriptor.


                    EINVAL    fildes is not connected to a STREAM
                              pipe.


                    ENXIO     Hangup received on fildes.






SunOS 5.11          Last change: 17 Nov 2005                   14






Ioctl Requests                                       streamio(7I)



     IRECVFD       Retrieves the file descriptor associated with
                    the  message sent by an ISENDFD ioctl over a
                    STREAM pipe. arg  is  a  pointer  to  a  data
                    buffer large enough to hold an strrecvfd data
                    structure containing the following members:

                      int  fd;
                      uidt  uid;
                      gidt  gid;

                    fd is an integer file descriptor. uid and gid
                    are  the  user id and group id, respectively,
                    of the sending stream.

                    If ONDELAY and  ONONBLOCK  are  clear  (see
                    open(2)), IRECVFD will block until a message
                    is present at the STREAM head. If ONDELAY or
                    ONONBLOCK  is  set,  IRECVFD will fail with
                    errno set to EAGAIN if no message is  present
                    at the STREAM head.

                    If the message at the STREAM head is  a  mes-
                    sage  sent  by  an  ISENDFD, a new user file
                    descriptor is allocated for the file  pointer
                    contained   in  the  message.  The  new  file
                    descriptor is placed in the fd field  of  the
                    strrecvfd  structure. The structure is copied
                    into the user data buffer pointed to by  arg.
                    On  failure,  errno is set to one of the fol-
                    lowing values:

                    EAGAIN       A message is not present at  the
                                 STREAM  head read queue, and the
                                 ONDELAY or ONONBLOCK  flag  is
                                 set.


                    EBADMSG      The message at the  STREAM  head
                                 read queue is not a message con-
                                 taining a passed  file  descrip-
                                 tor.


                    EFAULT       arg points outside the allocated
                                 address space.


                    EMFILE       NOFILES  file  descriptors   are
                                 currently open.






SunOS 5.11          Last change: 17 Nov 2005                   15






Ioctl Requests                                       streamio(7I)



                    ENXIO        Hangup received on fildes.


                    EOVERFLOW    uid or gid is too  large  to  be
                                 stored  in the structure pointed
                                 to by arg.



     ILIST         Allows the user to list all the module  names
                    on  the  stream, up to and including the top-
                    most driver name. If arg is NUL, the  return
                    value is the number of modules, including the
                    driver, that are on the STREAM pointed to  by
                    fildes.  This  allows  the  user  to allocate
                    enough space for the module names. If arg  is
                    non-null,  it  should  point  to  an strlist
                    structure that has the following members:

                      int slnmods;
                      struct  strmlist  *slmodlist;

                    The strmlist  structure  has  the  following
                    member:

                      char lname[FMNAMESZ]1];

                    The slnmods member indicates the  number  of
                    entries  the  process  has  allocated  in the
                    array.  Upon return, the slmodlist member of
                    the  strlist  structure contains the list of
                    module names, and the number of entries  that
                    have been filled into the slmodlist array is
                    found in  the  slnmods  member  (the  number
                    includes  the number of modules including the
                    driver).  The return value from ioctl() is 0.
                    The entries are filled in starting at the top
                    of the STREAM and continuing downstream until
                    either  the  end of the STREAM is reached, or
                    the number of requested modules (slnmods) is
                    satisfied.  On  failure,  errno may be set to
                    one of the following values:

                    EINVAL    The slnmods member is less than 1.


                    EAGAIN    Unable to allocate buffers



     IATMARK       Allows the user to see if the current message
                    on  the  stream head read queue is ``marked''



SunOS 5.11          Last change: 17 Nov 2005                   16






Ioctl Requests                                       streamio(7I)



                    by some module downstream. arg determines how
                    the checking is done when there may be multi-
                    ple marked messages on the STREAM  head  read
                    queue. It may take the following values:

                    ANYMARK     Check if the message is marked.


                    LASTMARK    Check if the message is the  last
                                one marked on the queue.

                    The return value is 1 if the  mark  condition
                    is  satisfied  and  0  otherwise. On failure,
                    errno is set to the following value:

                    EINVAL    Invalid arg value.



     ICKBAND       Check if the message of a given priority band
                    exists  on  the  stream head read queue. This
                    returns 1 if a message of  a  given  priority
                    exists,  0 if not, or -1 on error. arg should
                    be an integer containing  the  value  of  the
                    priority  band in question. On failure, errno
                    is set to the following value:

                    EINVAL    Invalid arg value.



     IGETBAND      Returns the priority band of the  first  mes-
                    sage  on  the  STREAM  head read queue in the
                    integer referenced by arg. On failure,  errno
                    is set to the following value:

                    ENODATA    No message on the STREAM head read
                               queue.



     ICANPUT       Check if a certain band is writable.  arg  is
                    set  to  the  priority  band in question. The
                    return value is 0 if the priority band arg is
                    flow  controlled,  1 if the band is writable,
                    or -1 on error. On failure, errno is  set  to
                    the following value:

                    EINVAL    Invalid arg value.






SunOS 5.11          Last change: 17 Nov 2005                   17






Ioctl Requests                                       streamio(7I)



     ISETCLTIME    Allows the user to set the  time  the  STREAM
                    head  will delay when a stream is closing and
                    there are data on the write  queues.   Before
                    closing  each  module  and driver, the STREAM
                    head will delay for the specified  amount  of
                    time  to  allow the data to drain. Note, how-
                    ever, that the module or  driver  may  itself
                    delay  in  its  close  routine; this delay is
                    independent of the STREAM head's delay and is
                    not  settable.  If, after the delay, data are
                    still present, data will be flushed. arg is a
                    pointer  to  an integer containing the number
                    of milliseconds to delay, rounded up  to  the
                    nearest  legal  value  on  the  system.   The
                    default is fifteen seconds. On failure, errno
                    is set to the following value:

                    EINVAL    Invalid arg value.



     IGETCLTIME    Returns the close time delay in  the  integer
                    pointed by arg.


     ISEROPT      Sets the error mode using the  value  of  the
                    argument arg.

                    Normally STREAM head errors  are  persistent;
                    once  they  are  set  due  to  an  MEROR or
                    MHANGUP, the  error  condition  will  remain
                    until  the  STREAM is closed. This option can
                    be used to set  the  STREAM  head  into  non-
                    persistent error mode i.e. once the error has
                    been  returned  in  response  to  a  read(2),
                    getmsg(2),  ioctl(2), write(2), or  putmsg(2)
                    call the error condition will be cleared. The
                    error  mode  can  be controlled independently
                    for read and write  side  errors.  Legal  arg
                    values are either none or one of:

                    RERNORM          Persistent read errors, the
                                      default.


                    RERNONPERSIST    Non-persistent read errors.

                    OR'ed with either none or one of:

                    WERNORM          Persistent  write   errors,
                                      the default.




SunOS 5.11          Last change: 17 Nov 2005                   18






Ioctl Requests                                       streamio(7I)



                    WERNONPERSIST    Non-persistent        write
                                      errors.

                                      When no value is  specified
                                      e.g.   for  the  read  side
                                      error  behavior  then   the
                                      behavior for that side will
                                      be left unchanged.

                    On failure, errno is  set  to  the  following
                    value:

                    EINVAL    arg is not one of the  above  legal
                              values.



     IGEROPT      Returns the current error mode setting in  an
                    int  pointed  to  by  the argument arg. Error
                    modes are described above for  ISEROPT.  On
                    failure,errno is set to the following value:

                    EFAULT    arg points  outside  the  allocated
                              address space.




     The following four commands  are  used  for  connecting  and
     disconnecting multiplexed STREAMS configurations.

     ILINK       Connects two streams, where fildes is the  file
                  descriptor  of the stream connected to the mul-
                  tiplexing driver, and arg is the file  descrip-
                  tor  of the STREAM connected to another driver.
                  The STREAM designated  by  arg  gets  connected
                  below  the multiplexing driver. ILINK requires
                  the multiplexing driver to send an acknowledge-
                  ment  message  to the STREAM head regarding the
                  linking operation. This call returns  a  multi-
                  plexor ID number (an identifier used to discon-
                  nect the multiplexor, see IUNLINK) on success,
                  and  -1 on failure. On failure, errno is set to
                  one of the following values:

                  ENXIO     Hangup received on fildes.


                  ETIME     Time out before acknowledgement  mes-
                            sage was received at STREAM head.





SunOS 5.11          Last change: 17 Nov 2005                   19






Ioctl Requests                                       streamio(7I)



                  EAGAIN    Temporarily   unable   to    allocate
                            storage to perform the ILINK.


                  ENOSR     Unable to allocate storage to perform
                            the   ILINK   due   to  insufficient
                            STREAMS memory resources.


                  EBADF     arg  is  not  a  valid,   open   file
                            descriptor.


                  EINVAL    fildes STREAM does not support multi-
                            plexing.


                  EINVAL    arg is not a stream,  or  is  already
                            linked under a multiplexor.


                  EINVAL    The specified  link  operation  would
                            cause  a  ``cycle''  in the resulting
                            configuration;  that  is,  a   driver
                            would be linked into the multiplexing
                            configuration in more than one place.


                  EINVAL    fildes is the file  descriptor  of  a
                            pipe or FIFO.


                  EINVAL    Either the upper or lower stream  has
                            a  major  number >= the maximum major
                            number on the system.

                  An ILINK can also fail while waiting  for  the
                  multiplexing  driver  to  acknowledge  the link
                  request, if a message indicating an error or  a
                  hangup  is  received  at  the  STREAM  head  of
                  fildes. In  addition,  an  error  code  can  be
                  returned  in  the  positive  or  negative  ack-
                  nowledgement message.  For these cases,  ILINK
                  will  fail  with  errno set to the value in the
                  message.


     IUNLINK     Disconnects the two streams specified by fildes
                  and  arg.  fildes is the file descriptor of the
                  STREAM connected to  the  multiplexing  driver.
                  arg  is  the  multiplexor  ID  number  that was
                  returned by the ILINK. If arg is -1, then  all



SunOS 5.11          Last change: 17 Nov 2005                   20






Ioctl Requests                                       streamio(7I)



                  streams  that were linked to fildes are discon-
                  nected.  As in ILINK,  this  command  requires
                  the  multiplexing  driver  to  acknowledge  the
                  unlink. On failure, errno is set to one of  the
                  following values:

                  ENXIO     Hangup received on fildes.


                  ETIME     Time out before acknowledgement  mes-
                            sage was received at STREAM head.


                  ENOSR     Unable to allocate storage to perform
                            the   IUNLINK  due  to  insufficient
                            STREAMS memory resources.


                  EINVAL    arg  is  an  invalid  multiplexor  ID
                            number or fildes is not the STREAM on
                            which the ILINK  that  returned  arg
                            was performed.


                  EINVAL    fildes is the file  descriptor  of  a
                            pipe or FIFO.

                  An  IUNLINK can also fail  while  waiting  for
                  the multiplexing driver to acknowledge the link
                  request, if a message indicating an error or  a
                  hangup  is  received  at  the  STREAM  head  of
                  fildes. In  addition,  an  error  code  can  be
                  returned  in  the  positive  or  negative  ack-
                  nowledgement   message.   For   these    cases,
                  IUNLINK  will fail with errno set to the value
                  in the message.


     IPLINK      Connects two streams, where fildes is the  file
                  descriptor  of the stream connected to the mul-
                  tiplexing driver, and arg is the file  descrip-
                  tor  of the STREAM connected to another driver.
                  The STREAM designated by arg gets connected via
                  a   persistent   link  below  the  multiplexing
                  driver.  IPLINK  requires   the   multiplexing
                  driver  to  send  an acknowledgement message to
                  the STREAM head regarding  the  linking  opera-
                  tion.  This call creates a persistent link that
                  continues to exist even if the file  descriptor
                  fildes  associated with the upper STREAM to the
                  multiplexing  driver  is  closed.   This   call
                  returns  a multiplexor ID number (an identifier



SunOS 5.11          Last change: 17 Nov 2005                   21






Ioctl Requests                                       streamio(7I)



                  that may be used to disconnect the multiplexor,
                  see  IPUNLINK)  on success, and -1 on failure.
                  On failure, errno is set to one of the  follow-
                  ing values:

                  ENXIO     Hangup received on fildes.


                  ETIME     Time out before acknowledgement  mes-
                            sage was received at the STREAM head.


                  EAGAIN    Unable to allocate STREAMS storage to
                            perform the  IPLINK.


                  EBADF     arg  is  not  a  valid,   open   file
                            descriptor.


                  EINVAL    fildes does not support multiplexing.


                  EINVAL    arg is not a  STREAM  or  is  already
                            linked under a multiplexor.


                  EINVAL    The specified  link  operation  would
                            cause  a  ``cycle''  in the resulting
                            configuration; that is, if  a  driver
                            would be linked into the multiplexing
                            configuration in more than one place.


                  EINVAL    fildes is the file  descriptor  of  a
                            pipe or FIFO.

                  An IPLINK can also fail while waiting for  the
                  multiplexing  driver  to  acknowledge  the link
                  request, if a message indicating an error on  a
                  hangup  is  received  at  the  STREAM  head  of
                  fildes. In  addition,  an  error  code  can  be
                  returned  in  the  positive  or  negative  ack-
                  nowledgement message.  For these cases, IPLINK
                  will  fail  with  errno set to the value in the
                  message.


     IPUNLINK    Disconnects the two streams specified by fildes
                  and  arg  that  are connected with a persistent
                  link. fildes is  the  file  descriptor  of  the
                  STREAM  connected  to  the multiplexing driver.



SunOS 5.11          Last change: 17 Nov 2005                   22






Ioctl Requests                                       streamio(7I)



                  arg is  the  multiplexor  ID  number  that  was
                  returned  by  IPLINK  when a STREAM was linked
                  below  the  multiplexing  driver.  If  arg   is
                  MUXIDAL  then all streams that are persistent
                  links  to  fildes  are  disconnected.   As   in
                  IPLINK, this command requires the multiplexing
                  driver to acknowledge the unlink.  On  failure,
                  errno is set to one of the following values:

                  ENXIO     Hangup received on fildes.


                  ETIME     Time out before acknowledgement  mes-
                            sage was received at the STREAM head.


                  EAGAIN    Unable to allocate  buffers  for  the
                            acknowledgement message.


                  EINVAL    Invalid multiplexor ID number.


                  EINVAL    fildes is the file  descriptor  of  a
                            pipe or FIFO.

                  An IPUNLINK can also fail  while  waiting  for
                  the multiplexing driver to acknowledge the link
                  request if a message indicating an error  or  a
                  hangup  is  received  at  the  STREAM  head  of
                  fildes. In  addition,  an  error  code  can  be
                  returned  in  the  positive  or  negative  ack-
                  nowledgement   message.    For   these   cases,
                  IPUNLINK will fail with errno set to the value
                  in the message.


RETURN VALUES
     Unless specified otherwise  above,  the  return  value  from
     ioctl()  is  0 upon success and  -1 upon failure, with errno
     set as indicated.

SEE ALSO
     Intro(3), close(2), fcntl(2), getmsg(2), ioctl(2),  open(2),
     poll(2),    putmsg(2),    read(2),   write(2),   signal(3C),
     signal.h(3HEAD),


     STREAMS Programming Guide






SunOS 5.11          Last change: 17 Nov 2005                   23



OpenSolaris man pages main menu

Contact us      |       About us      |       Term of use      |       Copyright © 2000-2010 MyWebUniversity.com ™