137 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			137 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
| .Dd Mar 2, 2010
 | |
| .Dt GETCONTEXT 3
 | |
| .Os 
 | |
| .Sh NAME
 | |
| .Nm getcontext ,
 | |
| .Nm setcontext
 | |
| .Nd get and set current user context
 | |
| .Sh LIBRARY
 | |
| .Lb libc
 | |
| .Sh SYNOPSIS
 | |
| .In ucontext.h
 | |
| .Ft int
 | |
| .Fn getcontext "ucontext_t *ucp"
 | |
| .Ft int
 | |
| .Fn setcontext "const ucontext_t *ucp"
 | |
| .Sh DESCRIPTION
 | |
| The
 | |
| .Xr makecontext 3
 | |
| , 
 | |
| .Xr swapcontext 3
 | |
| , 
 | |
| .Xr getcontext 3
 | |
| , and 
 | |
| .Xr setcontext 3
 | |
| together form a set of functions that allow user-level context switching between multiple threads of control within a process.
 | |
| .Pp
 | |
| The
 | |
| .Vt ucontext_t
 | |
| type is a structure that has at least the following members:
 | |
| .Bd -offset 4n -literal
 | |
| typedef struct __ucontext {
 | |
| 	ucontext_t *uc_link;
 | |
| 	sigset_t uc_sigmask;
 | |
| 	stack_t uc_stack;
 | |
| 	mcontext_t uc_mcontext;
 | |
| 	 ...
 | |
| } ucontext_t;
 | |
| .Ed
 | |
| 
 | |
| with
 | |
| .Vt sigset_t
 | |
| and
 | |
| .Vt stack_t
 | |
| defined in
 | |
| .In signal.h .
 | |
| Here 
 | |
| .Va uc_link
 | |
| points to the context that will be resumed when the current context returns (if 
 | |
| .Va uc_link
 | |
| is NULL, the process exits), 
 | |
| .Va uc_sigmask
 | |
| is the set of signals blocked in this context, 
 | |
| .Va uc_stack
 | |
| is the stack used by this context (when the context was modified by
 | |
| .Xr makecontext 3 ),
 | |
| and 
 | |
| .Va uc_mcontext
 | |
| is the machine-specific representation of the saved context. The 
 | |
| .Vt mcontext_t
 | |
| type is machine-dependent and opaque.
 | |
| .Pp
 | |
| MINIX 3 has an additional 
 | |
| .Va uc_flags
 | |
| member that supports the following flags:
 | |
| .Pp
 | |
| .Bd -offset 4n -literal
 | |
| UCF_IGNSIGM /* Current signal mask is not stored or restored */
 | |
| UCF_IGNFPU  /* FPU state is not stored or restored for this context */
 | |
| .Ed
 | |
| .Pp
 | |
| Not storing and restoring the signal mask and/or FPU state speeds up context switching considerably.
 | |
| .Pp
 | |
| The
 | |
| .Fn getcontext 
 | |
| function initializes the structure pointed to by 
 | |
| .Va ucp
 | |
| to the current user context of the calling thread. 
 | |
| .Pp
 | |
| The
 | |
| .Fn setcontext
 | |
| function restores the user context pointed to by 
 | |
| .Va ucp .
 | |
| A succesful call does not return; program execution resumes at the point specified by the 
 | |
| .Va ucp
 | |
| argument passed to
 | |
| .Fn setcontext .
 | |
| The 
 | |
| .Va ucp
 | |
| argument should be created either by a prior call to
 | |
| .Fn getcontext
 | |
| or
 | |
| .Fn makecontext .
 | |
| If the 
 | |
| .Va ucp
 | |
| argument was created with
 | |
| .Fn getcontext ,
 | |
| program execution continues as if the corresponding call of
 | |
| .Fn getcontext 
 | |
| had just returned. If the 
 | |
| .Va ucp
 | |
| argument was created with
 | |
| .Fn makecontext ,
 | |
| program execution continues with the function passed to
 | |
| .Fn makecontext .
 | |
| 
 | |
| .Sh RETURN VALUES
 | |
| When successful,
 | |
| .Fn getcontext
 | |
| returns 0 and 
 | |
| .Fn setcontext
 | |
| does not return. Otherwise, both return -1 and
 | |
| .Va errno 
 | |
| is set to indicate the error. 
 | |
| 
 | |
| .Sh ERRORS
 | |
| .Bl -tag -width Er
 | |
| .It Bq Er EINVAL
 | |
| The context is not properly initialized.
 | |
| .It Bq Er EFAULT
 | |
| .Va ucp
 | |
| is a NULL pointer.
 | |
| .El
 | |
| .Sh SEE ALSO
 | |
| .Xr makecontext 3 ,
 | |
| .Xr swapcontext 3
 | |
| .Sh STANDARDS
 | |
| The
 | |
| .Fn getcontext ,
 | |
| and
 | |
| .Fn setcontext
 | |
| functions conform to
 | |
| .St -xsh5
 | |
| and
 | |
| .St -p1003.1-2001 .
 | |
| .Sh AUTHORS
 | |
| Thomas Veerman
 | 
