OSSP CVS Repository

ossp - ossp-pkg/sio/BRAINSTORM/postfix-vstream.txt
Not logged in
[Honeypot]  [Browse]  [Directory]  [Home]  [Login
[Reports]  [Search]  [Ticket]  [Timeline
  [Raw

ossp-pkg/sio/BRAINSTORM/postfix-vstream.txt



VSTREAM(3)                                             VSTREAM(3)


NNAAMMEE
       vstream - light-weight buffered I/O package

SSYYNNOOPPSSIISS
       #include <vstream.h>

       VSTREAM *vstream_fopen(path, flags, mode)
       char    *path;
       int     flags;
       int     mode;

       VSTREAM *vstream_fdopen(fd, flags)
       int     fd;
       int     flags;

       int     vstream_fclose(stream)
       VSTREAM *stream;

       VSTREAM *vstream_printf(format, ...)
       char    *format;

       VSTREAM *vstream_fprintf(stream, format, ...)
       VSTREAM *stream;
       char    *format;

       int     VSTREAM_GETC(stream)
       VSTREAM *stream;

       int     VSTREAM_PUTC(ch, stream)
       int     ch;

       int     VSTREAM_GETCHAR(void)

       int     VSTREAM_PUTCHAR(ch)
       int     ch;

       int     vstream_ungetc(stream, ch)
       VSTREAM *stream;
       int     ch;

       int     vstream_fputs(str, stream)
       char    *str;
       VSTREAM *stream;

       long    vstream_ftell(stream)
       VSTREAM *stream;

       long    vstream_fseek(stream, offset, whence)
       VSTREAM *stream;
       long    offset;
       int     whence;

       int     vstream_fflush(stream)
       VSTREAM *stream;



                                                                1





VSTREAM(3)                                             VSTREAM(3)


       int     vstream_fread(stream, buf, len)
       VSTREAM *stream;
       char    *buf;
       int     len;

       int     vstream_fwrite(stream, buf, len)
       VSTREAM *stream;
       char    *buf;
       int     len;

       void    vstream_control(stream, name, ...)
       VSTREAM *stream;
       int     name;

       int     vstream_fileno(stream)
       VSTREAM *stream;

       int     vstream_ferror(stream)
       VSTREAM *stream;

       int     vstream_feof(stream)
       VSTREAM *stream;

       int     vstream_clearerr(stream)
       VSTREAM *stream;

       char    *VSTREAM_PATH(stream)
       VSTREAM *stream;

       char    *vstream_vfprintf(vp, format, ap)
       char    *format;
       va_list *ap;

       int     vstream_peek(stream)
       VSTREAM *stream;

DDEESSCCRRIIPPTTIIOONN
       The  _v_s_t_r_e_a_m  module  implements light-weight buffered I/O
       similar to the standard I/O routines.

       The interface is implemented in terms of VSTREAM structure
       pointers,  also  called  streams.  For  convenience, three
       streams  are  predefined:  VSTREAM_IN,  VSTREAM_OUT,   and
       VSTREAM_ERR.  These  streams are connected to the standard
       input, output and error file descriptors, respectively.

       Although the interface is patterned after the standard I/O
       library, there are some major differences:

       +o      File  descriptors  are  not  limited  to  the range
              0..255. This was reason #1 to write these  routines
              in the first place.

       +o      The  application  can  switch  between  reading and



                                                                2





VSTREAM(3)                                             VSTREAM(3)


              writing on the same stream without having  to  per-
              form  a  flush  or  seek  operation, and can change
              write position without having to flush.   This  was
              reason  #2.  Upon  position  or  direction  change,
              unread input is discarded, and unwritten output  is
              flushed   automatically.  Exception:  with  double-
              buffered streams, unread  input  is  not  discarded
              upon  change  of I/O direction, and output flushing
              is delayed until the read buffer must be  refilled.

       +o      A  bidirectional stream can read and write with the
              same buffer and file descriptor,  or  it  can  have
              separate  read/write  buffers  and/or file descrip-
              tors.

       +o      No automatic flushing of VSTREAM_OUT  upon  program
              exit,  or of VSTREAM_ERR at any time. No unbuffered
              or line buffered modes.  This functionality may  be
              added when it is really needed.

       vstream_fopen()  opens  the  named  file  and associates a
       buffered stream with it.  The _p_a_t_h, _f_l_a_g_s and  _m_o_d_e  argu-
       ments  are passed on to the open(2) routine. The result is
       a null pointer in case of problems. The _p_a_t_h  argument  is
       copied and can be looked up with VSTREAM_PATH().

       vstream_fdopen()  takes  an  open  file  and  associates a
       buffered stream with it. The _f_l_a_g_s argument specifies  how
       the  file  was opened. vstream_fdopen() either succeeds or
       never returns.

       vstream_fclose() closes the  named  buffered  stream.  The
       result  is  0  in  case of success, VSTREAM_EOF in case of
       problems.

       vstream_fprintf() formats its arguments according  to  the
       _f_o_r_m_a_t argument and writes the result to the named stream.
       The result is the stream argument. It understands  the  s,
       c, d, u, o, x, X, e, f and g format types, the l modifier,
       field width and precision, sign, and padding with zeros or
       spaces.  In  addition, vstream_fprintf() recognizes the %m
       format specifier and expands it to the error message  cor-
       responding  to the current value of the global _e_r_r_n_o vari-
       able.

       vstream_printf() performs formatted output to the standard
       output stream.

       VSTREAM_GETC()  reads  the  next  character from the named
       stream.  The result is  VSTREAM_EOF  when  end-of-file  is
       reached or if a read error was detected. VSTREAM_GETC() is
       an unsafe macro that evaluates some  arguments  more  than
       once.




                                                                3





VSTREAM(3)                                             VSTREAM(3)


       VSTREAM_GETCHAR()        is       an       alias       for
       VSTREAM_GETC(VSTREAM_IN).

       VSTREAM_PUTC() appends  the  specified  character  to  the
       specified  stream.  The result is the stored character, or
       VSTREAM_EOF in case  of  problems.  VSTREAM_PUTC()  is  an
       unsafe macro that evaluates some arguments more than once.

       VSTREAM_PUTCHAR(c)  is  an   alias   for   VSTREAM_PUTC(c,
       VSTREAM_OUT).

       vstream_unget() pushes back a character onto the specified
       stream and returns the character, or VSTREAM_EOF  in  case
       of  problems.   It is an error to push back before reading
       (or immediately  after  changing  the  stream  offset  via
       vstream_fseek()).  Upon successful return, vstream_unget()
       clears the end-of-file stream flag.

       vstream_fputs() appends the given  null-terminated  string
       to  the specified buffered stream. The result is 0 in case
       of success, VSTREAM_EOF in case of problems.

       vstream_ftell() returns the file offset for the  specified
       stream,  -1  if  the stream is connected to a non-seekable
       file.

       vstream_fseek() changes the file  position  for  the  next
       read or write operation. Unwritten output is flushed. With
       unidirectional streams, unread  input  is  discarded.  The
       _o_f_f_s_e_t  argument  specifies  the  file  position  from the
       beginning of the file (_w_h_e_n_c_e is SEEK_SET), from the  cur-
       rent  file position (_w_h_e_n_c_e is SEEK_CUR), or from the file
       end (SEEK_END). The result value is the file  offset  from
       the beginning of the file, -1 in case of problems.

       vstream_fflush() flushes unwritten data to a file that was
       opened in read-write or write-only mode.  vstream_fflush()
       returns 0 in case of success, VSTREAM_EOF in case of prob-
       lems. It is an error to flush a read-only stream.

       vstream_fread() and vstream_fwrite()  perform  unformatted
       I/O on the named stream. The result value is the number of
       bytes transferred. A short count is returned  in  case  of
       end-of-file or error conditions.

       vstream_control()  allows the user to fine tune the behav-
       ior of the specified stream.  The arguments are a list  of
       (name, value) pairs, terminated with VSTREAM_CTL_END.  The
       following lists the names and the types of the correspond-
       ing value arguments.

       VSTREAM_CTL_READ_FN (int (*)(int, void *, unsigned))
              The  argument  specifies  an  alternative  for  the
              read(2) function, for example, a read function that



                                                                4





VSTREAM(3)                                             VSTREAM(3)


              enforces a time limit.

       VSTREAM_CTL_WRITE_FN (int (*)(int, void *, unsigned))
              The  argument  specifies  an  alternative  for  the
              write(2) function, for example,  a  write  function
              that enforces a time limit.

       VSTREAM_CTL_PATH (char *)
              Updates   the  stored  pathname  of  the  specified
              stream. The pathname is copied.

       VSTREAM_CTL_DOUBLE (no value)
              Use separate buffers for reading and  for  writing.
              This  prevents  unread  input  from being discarded
              upon change of I/O direction.

       VSTREAM_CTL_READ_FD (int)
              The argument specifies the file  descriptor  to  be
              used  for reading.  This feature is limited to dou-
              ble-buffered streams, and  makes  the  stream  non-
              seekable.

       VSTREAM_CTL_WRITE_FD (int)
              The  argument  specifies  the file descriptor to be
              used for writing.  This feature is limited to  dou-
              ble-buffered  streams,  and  makes  the stream non-
              seekable.

       VSTREAM_CTL_WAITPID_FN (int (*)(pid_t, WAIT_STATUS_T *,
              int))
              A  pointer to function that behaves like waitpid().
              This information is used  by  the  vstream_pclose()
              routine.

       vstream_fileno()  gives  access to the file handle associ-
       ated with a buffered stream. With streams that have  sepa-
       rate  read/write  file descriptors, the result is the cur-
       rent descriptor.

       VSTREAM_PATH() is an unsafe macro that  returns  the  name
       stored with vstream_fopen() or with vstream_control(). The
       macro is unsafe because it evaluates some  arguments  more
       than once.

       vstream_ferror()  (vstream_feof()) returns non-zero when a
       previous operation on the specified stream caused an error
       (end-of-file) condition.

       vstream_clearerr()  resets the error and end-of-file indi-
       cation of specified stream, and returns no useful  result.

       vstream_vfprintf()  provides  an  alternate  interface for
       formatting an argument list according to a format  string.




                                                                5





VSTREAM(3)                                             VSTREAM(3)


       vstream_peek()  returns  the number of characters that can
       be read from the named stream without refilling  the  read
       buffer.

DDIIAAGGNNOOSSTTIICCSS
       Panics: interface violations. Fatal errors: out of memory.

SSEEEE AALLSSOO
       vbuf_print(3) formatting engine

BBUUGGSS
       Should use mmap() on reasonable systems.

LLIICCEENNSSEE
       The Secure Mailer license must be  distributed  with  this
       software.

AAUUTTHHOORR((SS))
       Wietse Venema
       IBM T.J. Watson Research
       P.O. Box 704
       Yorktown Heights, NY 10598, USA



































                                                                6



CVSTrac 2.0.1