bufio man page on Inferno

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

BUFIO(2)							      BUFIO(2)

NAME
       bufio, bufiofill - buffered input/output module

SYNOPSIS
       include "bufio.m";

       bufio := load Bufio Bufio->PATH;
       Iobuf: import bufio;

       SEEKSTART:  con Sys->SEEKSTART;
       SEEKRELA:   con Sys->SEEKRELA;
       SEEKEND:	   con Sys->SEEKEND;

       OREAD:	   con Sys->OREAD;
       OWRITE:	   con Sys->OWRITE;
       ORDWR:	   con Sys->ORDWR;

       EOF:	   con -1;
       ERROR:	   con -2;

       Iobuf: adt {
	   seek:   fn(b: self ref Iobuf, n: big, where: int): big;
	   offset: fn(b: self ref Iobuf): big;

	   read:   fn(b: self ref Iobuf, a: array of byte, n: int): int;
	   write:  fn(b: self ref Iobuf, a: array of byte, n: int): int;

	   getb:   fn(b: self ref Iobuf): int;
	   getc:   fn(b: self ref Iobuf): int;
	   gets:   fn(b: self ref Iobuf, sepchar: int): string;
	   gett:   fn(b: self ref Iobuf, sepstring: string): string;

	   ungetb: fn(b: self ref Iobuf): int;
	   ungetc: fn(b: self ref Iobuf): int;

	   putb:   fn(b: self ref Iobuf, b: byte): int;
	   putc:   fn(b: self ref Iobuf, c: int): int;
	   puts:   fn(b: self ref Iobuf, s: string): int;

	   flush:  fn(b: self ref Iobuf): int;
	   close:  fn(b: self ref Iobuf);

	   setfill: fn(b: self ref Iobuf, f: BufioFill);
       };

       open:   fn(name: string, mode: int): ref Iobuf;
       create: fn(name: string, mode, perm: int): ref Iobuf;
       fopen:  fn(fd: ref Sys->FD, mode: int): ref Iobuf;
       aopen: fn(a: array of byte): ref Iobuf;
       sopen:  fn(s: string): ref Iobuf;

       BufioFill: module
       {
	   fill:   fn(b: ref Bufio->Iobuf): int;
       };

DESCRIPTION
       Bufio provides an interface for buffered I/O.  A buffer is an adt which
       is created with open, fopen, create, aopen and sopen.

       Open takes two parameters, a filename and a mode.  The mode must be one
       of OREAD, OWRITE, or ORDWR (also defined in the Sys module).

       Create  is similar, but creates a new file if necessary, with file per‐
       missions specified by perm (see create in sys-open(2)), or truncates an
       existing	 file (without changing its permissions), before opening it in
       the given mode, and returning a reference to an Iobuf instance.

       Buffered I/O on an already open file  is	 made  possible	 using	fopen,
       which  takes  a file descriptor fd and an open mode, which must be com‐
       patible with the mode of the file descriptor.

       The file open functions return a ref Iobuf to  be  used	in  subsequent
       calls.  Thus:

	    lc := bufio->open("/net/tcp/0/local", bufio->OREAD);
	    addr := lc.gets('\n');
	    lc = nil;

       will open the file /net/tcp/0/local and read a line (including the ter‐
       minating newline character) from this file  to  initialize  the	string
       variable	 addr.	The file is closed implicitly by discarding (assigning
       nil to) the only reference to its Iobuf.

       The function aopen makes the contents of an array of  byte  a  readable
       through an Iobuf (it may not be written).  The function sopen similarly
       makes the contents of a string s readable.

       Processes can share the same instance of	 Bufio	and  safely  open  and
       close  different	 files concurrently, but two processes must not access
       the same Iobuf concurrently; they must coordinate  their	 access	 using
       some external mechanism (eg, lock(2)).

       Each  output file must be flushed or closed individually (see flush and
       close operations below).

       The calls implemented by Iobuf are:

       seek, read, and write
	      Each has the same parameters as its complement in Sys (see  sys-
	      seek(2),	sys-read(2)).  Note that SEEKSTART etc. are defined by
	      Bufio as well as by Sys, for use by seek.

       offset Return the current file  offset  in  bytes,  taking  account  of
	      buffered data.

       getb   Read a single byte from the buffered stream and return its value
	      as an int.

       getc   Read a single Unicode character, encoded in  UTF	(see  utf(6)),
	      and return its value as an int.

       gets   Read  a  line,  up  to  and  including  a character specified by
	      sepchar, typically a newline.  If none is found, read to the end
	      of the file.  The returned string includes the terminating char‐
	      acter.

       gett   Read characters until one of the characters in  sepstring.   The
	      returned	string includes the separator.	If none of the separa‐
	      tor characters is found, read to the end of the file.

       ungetb, ungetc
	      Undoes the effect of the last getb or getc, so that a subsequent
	      read  will  reread the byte (ungetb), or reread the byte(s) of a
	      UTF-encoded character (ungetc)

       putb, putc, and puts
	      Each writes its argument, a byte,	 a  character,	or  a  string,
	      respectively.  Text is encoded in UTF.

       setfill
	      Associates a BufioFill module instance f with Iobuf b; discussed
	      below.

       flush  Flush remaining data in the buffer,  if  necessary.   For	 files
	      opened  for  writing,  data  is  flushed to the file.  For files
	      opened for reading, any internally buffered data	is  discarded,
	      and the next read will read from the file.

       close  Flush  remaining	data  in  the  buffer, if necessary, close the
	      associated file, and discard buffers associated with  the	 file.
	      After  close,  no	 further method calls are allowed on the iobuf
	      adt.

       The BufioFill module interface can be ignored by most applications.  It
       allows  an  Iobuf  to  be  used	to read data from an arbitrary source.
       There is no `standard' implementation to load.  Instead, an application
       using  this interface uses a separate BufioFill module instance such as
       bufio-chanfill(2), or  provides	one  itself  using  sys-self(2).   The
       resulting  module reference is associated, using setfill, with an Iobuf
       previously obtained by sopen (the string parameter  limits  the	buffer
       space  allocated).   It	is up to the BufioFill module's implementation
       how its fill function replenishes the buffer; it should return the num‐
       ber of bytes now in the buffer, or Bufio->EOF.

SOURCE
       /appl/lib/bufio.b

SEE ALSO
       bufio-chanfill(2), intro(2), sys-open(2), sys-read(2), sys-seek(2)

DIAGNOSTICS
       Calls  that return a ref type (eg.  open, fopen, gets, and gett) return
       nil when encountering end of file or errors.  When an error occurs, the
       error  string,  printable  with the %r format, will usually be set as a
       consequence of an error in the underlying Sys module.  The other	 calls
       return  EOF  upon encountering end of file, and ERROR when encountering
       other errors.

BUGS
       A given Iobuf instance may not be accessed concurrently.

       An Iobuf instance must be manipulated by the same module instance  that
       created it.

       The BufioFill interface is subject to change.

								      BUFIO(2)
[top]

List of man pages available for Inferno

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