/* Void Main's man pages */

{ phpMan } else { main(); }

Command: man perldoc info search(apropos)  


MAKECONTEXT(3P)                                     POSIX Programmer's Manual                                    MAKECONTEXT(3P)



PROLOG
       This  manual  page is part of the POSIX Programmer's Manual.  The Linux implementation of this interface may differ (con-
       sult the corresponding Linux manual page for details of Linux behavior), or the  interface  may  not  be  implemented  on
       Linux.

NAME
       makecontext, swapcontext - manipulate user contexts

SYNOPSIS
       #include <ucontext.h>

       void makecontext(ucontext_t *ucp, void (*func)(void),
              int argc, ...);
       int swapcontext(ucontext_t *restrict oucp,
              const ucontext_t *restrict ucp);


DESCRIPTION
       The  makecontext()  function  shall  modify  the context specified by ucp, which has been initialized using getcontext().
       When this context is resumed using swapcontext() or setcontext(), program execution shall continue by calling func, pass-
       ing it the arguments that follow argc in the makecontext() call.

       Before  a  call  is made to makecontext(), the application shall ensure that the context being modified has a stack allo-
       cated for it. The application shall ensure that the value of argc matches the number of arguments of type int  passed  to
       func; otherwise, the behavior is undefined.

       The  uc_link  member  is  used to determine the context that shall be resumed when the context being modified by makecon-
       text() returns. The application shall ensure that the uc_link member is initialized prior to the call to makecontext().

       The swapcontext() function shall save the current context in the context structure pointed to by oucp and shall  set  the
       context to the context structure pointed to by ucp.

RETURN VALUE
       Upon  successful  completion, swapcontext() shall return 0. Otherwise, -1 shall be returned and errno set to indicate the
       error.

ERRORS
       The swapcontext() function shall fail if:

       ENOMEM The ucp argument does not have enough stack left to complete the operation.


       The following sections are informative.

EXAMPLES
       The following example illustrates the use of makecontext():


              #include <stdio.h>
              #include <ucontext.h>


              static ucontext_t ctx[3];


              static void
              f1 (void)
              {
                  puts("start f1");
                  swapcontext(&ctx[1], &ctx[2]);
                  puts("finish f1");
              }


              static void
              f2 (void)
              {
                  puts("start f2");
                  swapcontext(&ctx[2], &ctx[1]);
                  puts("finish f2");
              }


              int
              main (void)
              {
                  char st1[8192];
                  char st2[8192];


                  getcontext(&ctx[1]);
                  ctx[1].uc_stack.ss_sp = st1;
                  ctx[1].uc_stack.ss_size = sizeof st1;
                  ctx[1].uc_link = &ctx[0];
                  makecontext(&ctx[1], f1, 0);


                  getcontext(&ctx[2]);
                  ctx[2].uc_stack.ss_sp = st2;
                  ctx[2].uc_stack.ss_size = sizeof st2;
                  ctx[2].uc_link = &ctx[1];
                  makecontext(&ctx[2], f2, 0);


                  swapcontext(&ctx[0], &ctx[2]);
                  return 0;
              }

APPLICATION USAGE
       None.

RATIONALE
       None.

FUTURE DIRECTIONS
       None.

SEE ALSO
       exit(), getcontext(), sigaction(), sigprocmask(), the Base Definitions volume of IEEE Std 1003.1-2001, <ucontext.h>

COPYRIGHT
       Portions of this text are reprinted and reproduced in electronic form from IEEE Std 1003.1, 2003  Edition,  Standard  for
       Information  Technology -- Portable Operating System Interface (POSIX), The Open Group Base Specifications Issue 6, Copy-
       right (C) 2001-2003 by the Institute of Electrical and Electronics Engineers, Inc and The Open Group. In the event of any
       discrepancy  between this version and the original IEEE and The Open Group Standard, the original IEEE and The Open Group
       Standard  is  the  referee   document.   The   original   Standard   can   be   obtained   online   at   http://www.open-
       group.org/unix/online.html .



IEEE/The Open Group                                           2003                                               MAKECONTEXT(3P)

Valid XHTML 1.0!Valid CSS!