⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mosrun.c

📁 OpenMosix工具
💻 C
字号:
/* * Copyright (c) 2000, Amnon BARAK (amnon@cs.huji.ac.il). All rights reserved. * *	OpenMosix $Id: mosrun.c,v 1.7 2003/02/26 15:08:24 marhoy Exp $ * * Permission to use, copy and distribute this software is hereby granted  * under the terms of version 2 or any later version of the GNU General Public * License, as published by the Free Software Foundation. * * THIS SOFTWARE IS PROVIDED IN ITS "AS IS" CONDITION, WITH NO WARRANTY * WHATSOEVER. NO LIABILITY OF ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING * FROM THE USE OF THIS SOFTWARE WILL BE ACCEPTED. *//* * Author(s): Amnon Shiloh, Ariel Rosenblatt, Moshe Bar *//*  Adapted to OpenMosix from Mosix and bugfixing by David Santo Orcero *//*  irbis@orcero.org  http://www.orcero.org/irbis                       *//* Mosix is (c) of prof. Amnon Barak http://www.mosix.org               *//* Original code is (c) of prof. Amnon Barak http://www.mosix.org       *//* OpenMosix is (c) of Moshe Bar http://www.openmosix.com               *//* Each respective trademark is of its own owner                        *//* All rights reserved.                                                 *//* This software is distributed under GPL 2                             *//* THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTY IS ASSUMED.               *//* NO LIABILITY OF ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING            *//* FROM THE USE OF THIS SOFTWARE WILL BE ACCEPTED. IT CAN BURN              *//* YOUR HARD DISK, ERASE ALL YOUR DATA AND BROKE DOWN YOUR                  *//* MICROWAVE OVEN. YOU ARE ADVISED.                                         */#include <stdio.h>#include <string.h>#include <time.h>#include <sys/signal.h>#include <mos.h>char fok, zeroargv;int where = D_LEAVE;int lock = -100;intmain (int na, char *argv[]){  int tt = -1, dec = -1, policy = 0;  int opts = DADV_INHERIT | DADV_EXEC;  char *prog = (na && strchr (argv[0], '/')) ? strchr (argv[0], '/') + 1 :    (na ? argv[0] : NULL);  int tmp[2];  int randsel (char *str);  while (na > 1 && argv[1][0] == '-')    {      switch (argv[1][1])	{	case 'c':	case 'C':	  if (policy)	    goto Usage;	  policy = DADV_CPU;	  break;	case 'i':	case 'I':	  if (policy)	    goto Usage;	  policy = DADV_NOCPU;	  break;	case 'n':	case 'N':	  if (policy)	    goto Usage;	  policy = DADV_NODECAY;	  break;	case 's':	case 'S':	  if (policy)	    goto Usage;	  policy = DADV_SLOWDECAY;	  break;	case 'f':	  if (policy)	    goto Usage;	  policy = DADV_FASTDECAY;	  break;	case 'd':	case 'D':	  if (argv[1][2])	    argv[1] += 2;	  else if (na <= 1)	    goto Usage;	  else	    {	      na--;	      argv++;	    }	  if ((policy && policy != DADV_OWNDECAY) ||	      argv[1][0] < '0' || argv[1][0] > '9' ||	      (dec = atoi (argv[1])) < 0 || dec > DECAY_QUOTIENT)	    goto Usage;	  policy = DADV_OWNDECAY;	  break;	case 't':	case 'T':	  if (argv[1][2])	    argv[1] += 2;	  else if (na <= 1)	    goto Usage;	  else	    {	      na--;	      argv++;	    }	  if ((policy && policy != DADV_OWNDECAY) ||	      argv[1][0] < '0' || argv[1][0] >= '9' ||	      (tt = atoi (argv[1])) <= 0 || tt > 65535)	    goto Usage;	  policy = DADV_OWNDECAY;	  break;	case 'e':	  opts &= ~DADV_EXEC;	  opts |= DADV_NOEXEC | DADV_EXECONCE;	  break;	case 'E':	  opts &= ~DADV_NOEXEC;	  opts |= DADV_EXEC | DADV_EXECONCE;	  break;	case 'r':	  opts &= ~DADV_INHERIT;	  opts |= DADV_NOINHERIT | DADV_EXECONCE;	  break;	case 'R':	  opts &= ~DADV_NOINHERIT;	  opts |= DADV_INHERIT | DADV_EXECONCE;	  break;	case 'z':	case 'Z':	  zeroargv = 1;	  break;	case 'F':	  fok = 1;	  break;	case 'h':	case 'H':	  if (where != D_LEAVE)	    goto Usage;	  where = D_GOBACKHOME;	  break;	case '0':	case '1':	case '2':	case '3':	case '4':	case '5':	case '6':	case '7':	case '8':	case '9':	  if (where != D_LEAVE)	    goto Usage;	  where = atoi (&argv[1][1]);	  break;	case 'j':	  if (where != D_LEAVE)	    goto Usage;	  if (!(where = randsel (&argv[1][2])))	    goto Usage;	  break;	case 'l':	  lock = D_UNLOCK;	  break;	case 'L':	  lock = D_LOCK;	  break;	case 'k':	  lock = D_NOCHANGE;	  break;	default:	  goto Usage;	}      na--;      argv++;    }  if (na < 2 + zeroargv)    {    Usage:      fprintf (stderr,	       "Usage: %s [-{h|OpenMosix_ID|-jID1-ID2[,ID3-ID4]...} [-F] ] -{l|L|k}\n",	       prog);      fprintf (stderr,	       "              [-{c|i|n|s|f | ([-d dec] [-t tt])} [-{e|E}] [-{r|R}] ]\n");      fprintf (stderr, "              [-z] prog [args]...\n");      if (zeroargv)	fprintf (stderr, "The '-z' option requires at least one argument.\n");      exit (1);    }  if (!msx_is_mosix ())    {      execvp (argv[0] = argv[1], &argv[zeroargv ? 2 : 1]);      perror ("exec");      exit (1);    }  if (policy == DADV_OWNDECAY && (tt == -1 || dec == -1))    {      msx_get_own (tmp, &tmp[1]);      if (tmp[1])	{	  if (dec == -1)	    dec = tmp[0];	  if (tt == -1)	    tt = tmp[1];	}      if (tt == -1)	tt = msx_get_decayinterval ();      if (dec == -1)	{	  if (msx_get_fast ())	    dec = msx_get_fastdecay ();	  else if (msx_get_slow () || msx_get_cpujob () || msx_get_iojob ())	    dec = msx_get_slowdecay ();	  else	    dec = DECAY_QUOTIENT;	}    }  if (policy || (opts & DADV_EXECONCE))    {      if (dadvise (policy | opts, tt, dec) == -1)	{	  perror ("dadvise");	  exit (1);	}    }  switch (lock)    {    case -100:      if (where == D_LEAVE && (policy || (opts & DADV_EXECONCE)))	break;      /* fall thru: the default is to lock where we are */    case D_LOCK:      msx_lock ();      break;    case D_UNLOCK:      msx_unlock ();      break;    }  if (where != D_LEAVE && !msx_migrate (where) && !fok)    {      perror ("Migration Failed");      exit (1);    }  execvp (argv[0] = argv[1], &argv[zeroargv ? 2 : 1]);  perror ("exec");  exit (1);}intrandsel (char *str){  int n = 0, b, e;  char *s = str;  while (*s)    {      if (*s < '0' || *s > '9')	return (0);      b = atoi (s);      if (b <= 0 || b > MOSIX_MAX)	return (0);      while (*s >= '0' && *s <= '9')	s++;      if (*s == '-')	{	  s++;	  if (*s < '0' || *s > '9')	    return (0);	  e = atoi (s);	  if (e < b || e > MOSIX_MAX)	    return (0);	  while (*s >= '0' && *s <= '9')	    s++;	}      else	e = b;      n += e - b + 1;      if (*s == ',')	s++;      else if (*s)	return (0);    }  if (!n)    return (0);  srand ((unsigned int) time (0l) ^ getpid ());  n = rand () % n;  s = str;  while (n >= 0)    {      b = atoi (s);      if (b <= 0 || b > MOSIX_MAX)	return (0);      while (*s >= '0' && *s <= '9')	s++;      if (*s == '-')	{	  s++;	  e = atoi (s);	  while (*s >= '0' && *s <= '9')	    s++;	}      else	e = b;      if (n < e - b + 1)	return (b + n);      else	n -= (e - b + 1);      if (*s == ',')	s++;    }   /*NOTREACHED*/ return (0);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -