Annotation of coherent/a/usr/man/ALL/setjmp, revision 1.1.1.1

1.1       root        1: 
                      2: 
                      3: setjmp()                 General Function                setjmp()
                      4: 
                      5: 
                      6: 
                      7: 
                      8: Perform non-local goto
                      9: 
                     10: #include <setjmp.h>
                     11: iinntt sseettjjmmpp(_e_n_v) jjmmpp_bbuuff _e_n_v;
                     12: 
                     13: The function call is the only mechanism that C provides to trans-
                     14: fer control  between functions.  This mechanism,  however, is in-
                     15: adequate for some purposes, such as handling unexpected errors or
                     16: interrupts at  lower levels of  a program.  To  answer this need,
                     17: sseettjjmmpp helps to  provide a non-local _g_o_t_o facility.  sseettjjmmpp saves
                     18: a stack  context in _e_n_v, and returns value  zero.  The stack con-
                     19: text can be restored  with the function longjmp.  The type decla-
                     20: ration for  jjmmpp_bbuuff is in the header  file sseettjjmmpp.hh.  The context
                     21: saved  includes the  program  counter, stack  pointer, and  stack
                     22: frame.
                     23: 
                     24: ***** Example *****
                     25: 
                     26: The following gives a simple example of setjmp and longjmp.
                     27: 
                     28: 
                     29: #include <setjmp.h>
                     30: 
                     31: 
                     32: 
                     33: jmp_buf env;    /* place for setjmp to store its environment */
                     34: 
                     35: 
                     36: 
                     37: main()
                     38: {
                     39:         int rc;
                     40: 
                     41: 
                     42: 
                     43:         if(rc = setjmp(env)) { /* we come here on return */
                     44:                 printf("First char was %c\n", rc);
                     45:                 exit(0);
                     46:         }
                     47:         subfun();       /* this never returns */
                     48: }
                     49: 
                     50: 
                     51: 
                     52: subfun()
                     53: {
                     54:         char buf[80];
                     55: 
                     56: 
                     57: 
                     58: 
                     59: 
                     60: 
                     61: 
                     62: 
                     63: 
                     64: COHERENT Lexicon                                           Page 1
                     65: 
                     66: 
                     67: 
                     68: 
                     69: setjmp()                 General Function                setjmp()
                     70: 
                     71: 
                     72: 
                     73:         do {
                     74:                 printf("Enter some data\n");
                     75:                 gets(buf);      /* get data */
                     76:         } while(!buf[0]);       /* retry on null line */
                     77: 
                     78: 
                     79: 
                     80:         longjmp(env, buf[0]);   /* buf[0] must be non zero */
                     81: }
                     82: 
                     83: 
                     84: ***** See Also *****
                     85: 
                     86: general functions, getenv(), longjmp()
                     87: 
                     88: ***** Notes *****
                     89: 
                     90: Programmers should  note that many user-level  routines cannot be
                     91: interrupted and reentered  safely.  For that reason, improper use
                     92: of setjmp  and longjmp  can create mysterious  and irreproducible
                     93: bugs.  The  use of longjmp to exit  interrupt exception or signal
                     94: handlers is particularly hazardous.
                     95: 
                     96: 
                     97: 
                     98: 
                     99: 
                    100: 
                    101: 
                    102: 
                    103: 
                    104: 
                    105: 
                    106: 
                    107: 
                    108: 
                    109: 
                    110: 
                    111: 
                    112: 
                    113: 
                    114: 
                    115: 
                    116: 
                    117: 
                    118: 
                    119: 
                    120: 
                    121: 
                    122: 
                    123: 
                    124: 
                    125: 
                    126: 
                    127: 
                    128: 
                    129: 
                    130: COHERENT Lexicon                                           Page 2
                    131: 
                    132: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.