home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / zip / mint / mntutl95.lzh / MNTUTL95 / BG.C < prev    next >
C/C++ Source or Header  |  1993-08-03  |  1KB  |  67 lines

  1. /*
  2.  * compiling this requires the GCC library, and/or the spawnvp found
  3.  * in the init directory
  4.  */
  5.  
  6. #include <stdio.h>
  7. #include <process.h>
  8. #include <osbind.h>
  9. #include <errno.h>
  10. #include <mintbind.h>
  11.  
  12. void
  13. usage()
  14. {
  15.     fprintf(stderr, "Usage: bg [-o file] program [args ... ]\n");
  16.     exit(2);
  17. }
  18.  
  19. int
  20. main(argc, argv)
  21.     int argc;
  22.     char **argv;
  23. {
  24.     long r;
  25.     int olderr;
  26.     int oldpgrp;
  27.     char *name;
  28.  
  29.     if (!argv[1]) {
  30.         usage();
  31.     }
  32.  
  33.     olderr = Fdup(2);
  34.     argv++;
  35.     name = *argv;
  36.     if (!strcmp(name, "-o")) {
  37.         name = *++argv;
  38.         if (!name) usage();
  39.         r = Fcreate(name, 0);
  40.         if (r < 0) {
  41.             errno = -r;
  42.             perror(name);
  43.             exit(1);
  44.         }
  45.         name = *++argv;
  46.         if (!name) usage();
  47.     /* redirect stdout, stderr, and the control terminal (-1) */
  48.         Fforce(-1, r);
  49.         Fforce(1, r);
  50.         Fforce(2, r);
  51.     }
  52.  
  53. /* put child process into a new process group */
  54.     oldpgrp = Pgetpgrp();
  55.     Psetpgrp((int)Pgetpid(), (int)Pgetpid());
  56.     r = spawnvp(P_NOWAIT, name, argv);
  57.     Psetpgrp((int)Pgetpid(), oldpgrp);
  58.  
  59.     Fforce(2, olderr);
  60.  
  61.     if (r < 0) {
  62.         perror(name);
  63.         exit(2);
  64.     }
  65.     exit(r);
  66. }
  67.