Annotation of coherent/a/usr/man/COHERENT/execve, revision 1.1

1.1     ! root        1: 
        !             2: 
        !             3: execve()               COHERENT System Call              execve()
        !             4: 
        !             5: 
        !             6: 
        !             7: 
        !             8: Execute a load module
        !             9: 
        !            10: eexxeeccvvee(_f_i_l_e, _a_r_g_v, _e_n_v)
        !            11: cchhaarr *_f_i_l_e, *_a_r_g_v[], *_e_n_v[];
        !            12: 
        !            13: The COHERENT  system includes six functions  that allow a process
        !            14: to execute another  executable file (or load module, as described
        !            15: in the header  l.out.h).  execve specifies arguments as a single,
        !            16: NULL-terminated array  of parameters, called  argv.  The argument
        !            17: env is the address of an array of pointers to strings that define
        !            18: file's environment.  This allows execve to pass a new environment
        !            19: to the  program being executed.  For  more information on program
        !            20: execution, see execl.
        !            21: 
        !            22: ***** Example *****
        !            23: 
        !            24: The  following example  demonstrates execve,  as well  as tmpnam,
        !            25: getenv,  and  path.  It  finds  all lines  with  more than  LIMIT
        !            26: characters and call MicroEMACS to edit them.
        !            27: 
        !            28: 
        !            29: #include <stdio.h>
        !            30: #include <path.h>
        !            31: #include <sys/stat.h>
        !            32: 
        !            33: 
        !            34: 
        !            35: #define LIMIT 70
        !            36: 
        !            37: 
        !            38: 
        !            39: extern char *getenv(), **environ, *tempnam();
        !            40: 
        !            41: 
        !            42: 
        !            43: main(argc, argv)
        !            44: char *argv[];
        !            45: {
        !            46:         /*                me     -e   tmp   file */
        !            47:         char *cmda[5] = { NULL, "-e", NULL, NULL, NULL };
        !            48:         FILE *ifp, *tmp;
        !            49:         char line[256];
        !            50:         int  ct, len;
        !            51: 
        !            52: 
        !            53: 
        !            54:         if ((NULL == (cmda[3] = argv[1])) ||
        !            55:             (NULL == (ifp = fopen(argv[1], "r")))) {
        !            56:                 fprintf(stderr, "Cannot open %s\n", argv[1]);
        !            57:                 exit(1);
        !            58:         }
        !            59: 
        !            60: 
        !            61: 
        !            62: 
        !            63: 
        !            64: COHERENT Lexicon                                           Page 1
        !            65: 
        !            66: 
        !            67: 
        !            68: 
        !            69: execve()               COHERENT System Call              execve()
        !            70: 
        !            71: 
        !            72: 
        !            73: 
        !            74:         if (cmda[0] = path(getenv("PATH"), "me", AEXEC) == NULL) {
        !            75:                 fprintf(stderr, "Cannot locate me\n");
        !            76:                 exit(1);
        !            77:         }
        !            78: 
        !            79: 
        !            80: 
        !            81:         if (NULL == (tmp = fopen((cmda[2] = tempnam(NULL, "lng")), "w"))) {
        !            82:                 fprintf(stderr, "Cannot open tmpfile\n");
        !            83:                 exit(1);
        !            84:         }
        !            85: 
        !            86: 
        !            87: 
        !            88:         for (ct = 1; NULL != fgets(line, sizeof(line), ifp); ct++)
        !            89:                 if (((len = strlen(line)) > LIMIT) ||
        !            90:                     ('\n' != line[len -1]))
        !            91:                         fprintf(tmp, "%d: %d characters long\n", ct, len);
        !            92: 
        !            93: 
        !            94: 
        !            95:         fclose(tmp);
        !            96:         fclose(ifp);
        !            97: 
        !            98: 
        !            99: 
        !           100:         if (execve(cmda[0], cmda, environ) < 0) {
        !           101:                 fprintf(stderr, "cannot execute me\n");
        !           102:                 exit(1);
        !           103:         }
        !           104:         /* We never reach here ! */
        !           105: }
        !           106: 
        !           107: 
        !           108: ***** See Also *****
        !           109: 
        !           110: COHERENT system calls, environ, execution
        !           111: 
        !           112: ***** Diagnostics *****
        !           113: 
        !           114: execve does not return  if successful.  It returns -1 for errors,
        !           115: such as file  being nonexistent, not accessible with execute per-
        !           116: mission, having a bad format, or too large to fit in memory.
        !           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.