en

stk.3


Introduction to Library Functions                          STK(3)

NAME
     stk - data stack storage library

SYNOPSIS
     #include <stk.h>

     Stk_t *stkopen(int flags);
     Stk_t *stkinstall(Stk_t *stack, char *(overflow)(int));
     int stkclose(Stk_t *stack);
     void stklink(Stk_t *stack)

     char *stkalloc(Stk_t *stack, unsigned size);
     char *stkcopy(Stk_t *stack, const char *string);
     char *stkset(Stk_t *stack, char *address, unsigned offset);

     char *stkseek(Stk_t *stack, unsigned offset);
     int stktell(Stk_t *stack);
     char *stkptr(Stk_t *stack, unsigned offset);
     char *stkfreeze(Stk_t *stack, unsigned extra);

DESCRIPTION
     stk is a package of routines designed to  provide  efficient
     stack  oriented  dynamic  storage.  A stack abstraction con-
     sists of an  ordered  list  of  contiguous  memory  regions,
     called  stack  frames,  that  can  hold objects of arbitrary
     size.  A stack is represented by the type Stk_t  defined  in
     header  <stk.h>.  The type Stk_t is compatible with the type
     Sfio_t defined by the sfio(3) library.  At any instant there
     is  one active stack which can be referenced by the constant
     stkstd.  Variable size objects can be added  to  the  active
     stack and programs can reference these objects directly with
     pointers.   In  addition,  the  last  object  on  the  stack
     (referred to here as the current object) can be built incre-
     mentally.  The current object has an associated offset  that
     determines  its  current  size.  While the current object is
     being built incrementally, its location might change so that
     it  is  necessary  to  reference  the  object  with relative
     offsets ranging from zero  to  the  current  offset  of  the
     object.

     There is a preset initial active stack.   To  use  an  addi-
     tional stack, it is necessary to create it and to install it
     as the active stack.  A stack is created with the  stkopen()
     function.   A  flags  argument  of  STK_SMALL indicates that
     unused space on the stack  should  be  freed  whenever  this
     stack  ceases  to  be the active stack. If successful, stko-
     pen() returns a pointer to a stack whose reference count  is
     1.   Otherwise,  stkopen()  returns  a  null  pointer.   The
     stklink() function increases the  reference  count  for  the
     given  stack.  The stkinstall() function makes the specified
     stack the active stack and returns a pointer to the previous

SunOS 5.10                Last change:                          1

Introduction to Library Functions                          STK(3)

     active  stack.   When  the overflow argument is not null, it
     specifies a function that will be called whenever  malloc(3)
     fails while trying to grow the stack.  The overflow function
     will be called with the size that was passed  to  malloc(3).
     The  overflow  function can call exit(3), call longjmp(3) or
     return.  If the overflow function returns, it must return  a
     pointer  to  a memory region of the given size.  The default
     action is to write an error to standard error  and  to  call
     exit(2)  with  a  non-zero exit value.  When stack is a null
     pointer, the active stack is not changed  but  the  overflow
     function  for  the active stack can be changed and a pointer
     to the active stack is returned.   The  stkclose()  function
     decrements  the reference count and frees the memory associ-
     ated with the specified stack when the  reference  count  is
     zero.  The effect of subsequent references to objects on the
     stack are undefined.

     The stkalloc() function returns an aligned pointer to  space
     on  the  active stack that can be used to hold any object of
     the given size.  stkalloc() is similar to  malloc(3)  except
     that  individual  items  returned  by  stkalloc() can not be
     freed.  stkalloc() causes the offset of the  current  object
     to be set to zero.

     The stkcopy() function copies  the  given  string  onto  the
     stack  and  returns  a  pointer  to the string on the stack.
     stkcopy() causes the offset of the current object to be  set
     to zero.

     The stkset() function finds the frame containing  the  given
     address,  frees  all  frames that were created after the one
     containing the given address, and sets the current object to
     the  given address.  The top of the current object is set to
     offset bytes from current object.  If  address  is  not  the
     address of an object on the stack the result is undefined.

     The sfio(3) output functions can be used  to  build  current
     object incrementally.  An object that is built incrementally
     on the stack will always occupy contiguous memory  within  a
     stack frame but until stkfreeze() is called, the location in
     memory for the object can change.  There is a current offset
     associated  with  the  current  object that determines where
     subsequent operations  apply.   Initially,  this  offset  is
     zero,  and  the offset changes as a result of the operations
     you specify.  The stkseek() function is used set the  offset
     for  the  current  object.  The offset argument to stkseek()
     specifies the new offset for the current object.  The  frame
     will  be  extended or moved if offset causes the new current
     offset  to  extend  beyond  the  current  frame.   stkseek()
     returns  a  pointer  to the beginning of the current object.
     The stktell() function  gives  the  offset  of  the  current
     object.

SunOS 5.10                Last change:                          2

Introduction to Library Functions                          STK(3)

     The stkptr() function converts  the  given  offset  for  the
     current  object  into  a  memory address on the stack.  This
     address is only  valid  until  another  stack  operation  is
     given.  The result is not defined if offset exceeds the size
     of the current object.  The stkfreeze() function  terminates
     the current object on the stack and returns a pointer to the
     beginning of this object.  If extra is non-zero, extra bytes
     are  added  to  the  stack before the current object is ter-
     minated.  The first added byte will  contain  zero  and  the
     contents of the remaining bytes are undefined.

HISTORY
     The stk interface was derived from similar routines  in  the
     KornShell  code  that  is  used for building parse trees and
     carrying out expansions.  It provides an efficient mechanism
     for  grouping dynamically allocated objects so that they can
     be freed all at once rather than individually.

AUTHOR
      David Korn

SEE ALSO
     exit(2) longjmp(3) malloc(3) sfio(3)

SunOS 5.10                Last change:                          3


Generated by GNU enscript 1.6.4.

Tags:
Created by admin on 2009/10/26 12:14
Last modified by admin on 2009/10/26 12:14

Collectives

Project ksh93-integration Pages


XWiki Enterprise 2.7.1.34853 - Documentation