sbufpub man page on SunOS

Man page or keyword search:  
man Server   20652 pages
apropos Keyword Search (all sections)
Output format
SunOS logo
[printable version]

SBUFPUB(3CC4)							 SBUFPUB(3CC4)

NAME
       sbufpub - public interface of the stream buffer base class

SYNOPSIS
       #include <iostream.h>
       typedef long streampos;
       typedef long streamoff;

       class ios : virtual public unsafe_ios, public stream_MT {
       public:
	       enum open_mode  {
		   in	    = 0x01,	   // open for reading
		   out	    = 0x02,	   // open for writing
		   ate	    = 0x04,	   // seek to eof upon original open
		   app	    = 0x08,	   // append mode: all additions at eof
		   trunc    = 0x10,	   // truncate file if already exists
		   nocreate = 0x20,	   // open fails if file doesn't exist
		   noreplace= 0x40	   // open fails if file already exists
	       };

	       // stream seek direction
	       enum seek_dir { beg=0, cur=1, end=2 };

	       // see ios(3CC4) for remainder ...
       } ;

       class streambuf : public stream_MT {
       public :

	       int	       in_avail();
	       int	       out_waiting();
	       int	       sbumpc();
	       streambuf*      setbuf(char* ptr, int len);
	       streampos       seekpos(streampos, int =ios::in|ios::out);
	       streampos       seekoff(streamoff, seek_dir, int =ios::in|ios::out);
	       int	       sgetc();
	       int	       sgetn(char* ptr, int n);
	       int	       snextc();
	       int	       sputbackc(char);
	       int	       sputc(int c);
	       int	       sputn(const char* s, int n);
	       void	       stossc();
	       virtual int     sync();

	       int	       in_avail_unlocked();
	       int	       out_waiting_unlocked();
	       int	       sbumpc_unlocked();
	       int	       sgetc_unlocked();
	       int	       sgetn_unlocked(char* ptr, int n);
	       int	       snextc_unlocked();
	       int	       sputbackc_unlocked(char);
	       int	       sputc_unlocked(int c);
	       int	       sputn_unlocked(const char* s, int n);
	       void	       stossc_unlocked();
       };

DESCRIPTION
       The  streambuf  class defines the basic buffer-class functionality from
       which actual buffer classes are derived.	 This public interface	repre‐
       sents  the  functions which any stream class might need to call upon to
       perform its buffer-related functions.  No object of type is expected to
       be  created.   Rather,  buffer  objects must be of a class type derived
       from streambuf.	See sbufprot (3CC4) for a discussion of the  protected
       interface necessary for such derivations.

   ENVIRONMENT
       To  make streambuf multi-threaded safe (MT safe), that is, able to work
       correctly in a multi-threaded environment, locks have been used in each
       public  member  function. An alternative set of public member functions
       without locks has been introduced for use in single  threaded  applica‐
       tions  where  performance is critical. These member functions share the
       same name as the original function with the  addition  of  the  suffix:
       _unlocked. Other than being MT unsafe these member functions have iden‐
       tical functionality.

       Class streambuf supports an abstract buffer class.  It  consists	 logi‐
       cally  of a sequence of characters and one or two pointers defining the
       location where the next character will be  stored  and/or  fetched.   A
       buffer class intended only for input (or output) will have only the get
       (or put) pointer.  A buffer class intended for both  input  and	output
       will have both pointers.

       The get and put pointers should be understood as pointing between char‐
       acters in the sequence.	The next character to be fetched from an input
       buffer  is  the	one  just  after  the get pointer.  The next character
       placed into an output stream will be stored just after the put pointer.
       When at the beginning of the sequence, a pointer points just before the
       first character; at the end of the sequence it points  just  after  the
       last character.

       There  can  be  different  kinds of buffers (also called reserve areas)
       with different strategies, due to different underlying devices.	Queue-
       like  buffers, such as strstreambuf (see ssbuf(3CC4)), have independent
       get and put pointers.  The strstreambuf is an in-memory array of	 char‐
       acters  and  supports stores and fetches at arbitrary locations.	 File-
       like buffers, such as filebuf (see filebuf(3CC4)), may permit both  get
       and put operations, but there is effectively only one pointer; the next
       get or put will always be at the current location.  (In practice	 there
       may be two pointers, but they always point to the same place.)

       The streambuf uses an array of characters as the buffer, and calls upon
       virtual functions to fill an empty input buffer or to flush a full out‐
       put  buffer.  (See sbufprot(3CC4) for details.)	The storing, fetching,
       and pointer manipulation functions are  generally  inline  for  maximum
       efficiency.  These are described below.

   Input functions
       int c = sbuf.sgetc()
	      This  function  returns  the character after the get pointer, or
	      EOF if the get pointer is at the end of the  sequence.   Despite
	      its name, this function does NOT move the get pointer.

       int c = sbuf.snextc()
	      This  function  moves the get pointer forward one position, then
	      returns the character after the get pointer's new position.   If
	      the  get	pointer	 is at the end of the sequence before or after
	      the call to this function	 (no  character	 is  available),  this
	      function	returns EOF.  Example:	Suppose the input buffer looks
	      like this:
		   abc|def
	      where `|' marks the position of the get pointer.	This  function
	      will advance the get pointer and return `e'.

       int c = sbuf.sbumpc()
	      This  function  should  probably have been called ``sgetc''.  It
	      moves the get pointer forward one position and returns the char‐
	      acter it moved past.  If the get pointer is currently at the end
	      of the sequence, this function returns EOF.

       sbuf.stossc()
	      This function moves the get pointer  forward  one	 position;  it
	      returns  nothing.	  The  combination  of sgetc and stossc can be
	      used to implement a scanner without using putback,  since	 sgetc
	      provides lookahead.

       int i = sbuf.sgetn(ptr, len)
	      This  function  gets  the	 next len characters following the get
	      pointer, copying them to the char array pointed to  by  ptr;  it
	      advances	the  get  pointer past the last character fetched.  If
	      fewer than len characters are left,  it  gets  as	 many  as  are
	      available.  It returns the number of characters fetched.

       int c = sbuf.sputbackc(c)
	      This  function attempts to move the get pointer back one charac‐
	      ter and put c at the new location.  Depending on the  underlying
	      buffer  mechanism,  it  may  not be possible to move the pointer
	      back, or it may not be possible to store	c  at  that  location.
	      Therefore,  the  effect of the function is uncertain if c is not
	      the same as the character just ahead of the get pointer.	 Again
	      depending	 on  the  underlying  mechanism,  this	function might
	      require resynchronization with an external device.   This	 func‐
	      tion  returns  EOF if the attempted putback fails.  What consti‐
	      tutes failure depends on the details of the actual buffer class,
	      but  would  probably include already being at the beginning of a
	      device.

       int i = sbuf.in_avail()
	      This function  returns  the  number  of  characters  immediately
	      available	 in the get area.  It is certain that i characters may
	      be fetched without error, and  without  accessing	 any  external
	      device.

   Output functions
       int i = sbuf.sputc(c)
	      This  function stores c just after the put pointer, and advances
	      the pointer one position, possibly extending the	sequence.   It
	      returns  c,  or EOF on error.  What constitutes an error depends
	      on the actual derived buffer class.

       int i = sbuf.sputn(ptr, len)
	      From the location pointed to by ptr, stores exactly len  charac‐
	      ters  after the put pointer, advancing the put pointer just past
	      the last character.  It returns the number of characters stored,
	      which  ought  to be len.	Fewer than len characters stored indi‐
	      cates some sort of error.

       int i = sbuf.out_waiting()
	      This function returns the number of characters in the put	 area;
	      that is, the number of characters pending output to the ultimate
	      destination.

   Positioning functions
       streampos pos = sbuf.seekoff(off, dir, mode)
	      This function repositions	 the  get  and/or  the	put  pointers,
	      depending	 on  the bits set in mode.  If ios::in is set in mode,
	      the get pointer is moved; if ios::out is set in  mode,  the  put
	      pointer  is  moved.  The distance to move is off, a signed quan‐
	      tity.  The possible values for dir are
		   ios::beg - move off bytes from the beginning of the stream;
		   ios::cur - move off bytes from the current position;
		   ios::end - move off bytes from the end of the stream.
	      This function returns the new position, or  EOF  if  the	stream
	      could  not  be  positioned as requested.	Note:  not all streams
	      support positioning.  Note:   the	 position  returned  (of  type
	      streampos)  should  not  be the subject of any arithmetic opera‐
	      tions, but should be treated as a ``magic'' value.

       streampos newpos = sbuf.seekpos(pos, mode)
	      This function repositions	 the  get  and/or  the	put  pointers,
	      depending	 on the bits set in mode, to position pos.  If ios::in
	      is set in mode, the get pointer is moved; if ios::out is set  in
	      mode,  the put pointer is moved.	The value of pos should be one
	      which was returned by a previous call of seekoff or seekpos, but
	      there are two special values which have conventional meanings:
		   (streampos)0	  - the beginning of the stream;
		   (streampos)EOF - error indicator.

       int i = sbuf.sync()
	      This  function synchronizes the streambuf with its actual stream
	      of characters.  The details depend  on  the  particular  derived
	      buffer class.  Generally, any characters in the put area will be
	      flushed to their final destination, and any  characters  in  the
	      input  buffer  will  be given back to their source, if possible.
	      This generally means that in_avail() and out_waiting() will both
	      return  zero  after  a  sync.   This function returns EOF on any
	      error, zero on success.

   Miscellaneous functions
       streambuf* sb = sbuf.setbuf(ptr, len)
	      This function logically belongs in the protected interface,  but
	      was  placed  in  the public interface for compatibility with the
	      original stream package.	This  function	attempts  to  use  the
	      array of len bytes starting at the location pointed to by ptr as
	      the buffer area.	Setting ptr to zero or len  to	less  than  or
	      equal  to	 zero  requests an unbuffered state.  Depending on the
	      details of the derived class, it may not be  possible  to	 honor
	      the  request.   This function returns a pointer to the streambuf
	      on success, zero if the request could not be honored.

SEE ALSO
       ios.intro(3CC4), ios(3CC4), sbufprot(3CC4),

       C++ Library Reference

	       Chapter 3, "The Classic iostream Library",

	       Chapter 4, "Using Classic iostream in a Multithreaded Environ‐
       ment."

				 18 June 1998			 SBUFPUB(3CC4)
[top]

List of man pages available for SunOS

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net