*nix Documentation Project
·  Home
 +   man pages
·  Linux HOWTOs
·  FreeBSD Tips
·  *niX Forums

  man pages->OpenBSD man pages -> funopen (3)              
Title
Content
Arch
Section
 

FUNOPEN(3)

Contents


NAME    [Toc]    [Back]

     funopen, fropen, fwopen - open a stream

SYNOPSIS    [Toc]    [Back]

     #include <stdio.h>

     FILE *
     funopen(const void *cookie, int (*readfn)(void  *,  char  *,
int),
             int (*writefn)(void *, const char *, int),
             fpos_t   (*seekfn)(void   *,   fpos_t,   int),   int
(*closefn)(void *));

     FILE *
     fropen(const void *cookie, int  (*readfn)(void  *,  char  *,
int));

     FILE *
     fwopen(const void *cookie, int (*writefn)(void *, const char
*, int));

DESCRIPTION    [Toc]    [Back]

     The funopen() function associates a stream with up  to  four
``I/O
     functions''.   Either  readfn  or writefn must be specified;
the others can
     be given as an appropriately typed NULL pointer.  These  I/O
functions
     will  be used to read, write, seek and close the new stream.

     In general, omitting a function means that  any  attempt  to
perform the associated
  operation  on  the resulting stream will fail.  If
the close function
 is omitted, closing the stream will flush any  buffered
output and
     then succeed.

     The  calling  conventions  of  readfn,  writefn, seekfn, and
closefn must
     match those, respectively, of read(2),  write(2),  lseek(2),
and close(2)
     with the exceptions that they are passed the cookie argument
specified to
     funopen() in place of the traditional file descriptor  argument and that
     the  seek function takes an fpos_t argument and not an off_t
argument.

     Read and write I/O functions are allowed to change  the  underlying buffer
     on  fully  buffered  or  line  buffered  streams  by calling
setvbuf(3).  They
     are also not  required  to  completely  fill  or  empty  the
buffer.  They are
     not,  however,  allowed to change streams from unbuffered to
buffered or to
     change the state of the line buffering flag.  They must also
be prepared
     to  have read or write calls occur on buffers other than the
one most recently
 specified.

     All user I/O functions can report an error by returning  -1.
Additionally,
  all  of  the functions should set the external variable
errno appropriately
 if an error occurs.

     An error on closefn() does not keep the stream open.

     As a convenience, the include  file  <stdio.h>  defines  the
macros fropen()
     and fwopen() as calls to funopen() with only a read or write
function
     specified.

RETURN VALUES    [Toc]    [Back]

     Upon successful completion, funopen() returns a FILE  pointer.  Otherwise,
     NULL is returned and the global variable errno is set to indicate the error.

ERRORS    [Toc]    [Back]

     [EINVAL]      The funopen() function was called without  either a read or
                   write  function.   The  funopen() function may
also fail and
                   set errno for any of the errors specified  for
the routine
                   malloc(3).

SEE ALSO    [Toc]    [Back]

      
      
     fcntl(2), open(2), fclose(3), fopen(3), fseek(3), setbuf(3)

HISTORY    [Toc]    [Back]

     The funopen() functions first appeared in 4.4BSD.

BUGS    [Toc]    [Back]

     The  funopen() function may not be portable to systems other
than BSD.

OpenBSD      3.6                           June      9,      1993
[ Back ]
 Similar pages
Name OS Title
fopen OpenBSD stream open functions
freopen OpenBSD stream open functions
fdopen OpenBSD stream open functions
fopen FreeBSD stream open functions
freopen NetBSD stream open functions
fdopen NetBSD stream open functions
fdopen FreeBSD stream open functions
freopen FreeBSD stream open functions
fopen Linux stream open functions
fopen NetBSD stream open functions
Copyright © 2004-2005 DeniX Solutions SRL
newsletter delivery service