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

📄 ulimit.def

📁 android-w.song.android.widget
💻 DEF
📖 第 1 页 / 共 2 页
字号:
      /* `ulimit something' is same as `ulimit -f something' */      cmdlist[ncmd++].arg = list ? list->word->word : (char *)NULL;      if (list)	list = list->next;    }  /* verify each command in the list. */  for (c = 0; c < ncmd; c++)    {      limind = _findlim (cmdlist[c].cmd);      if (limind == -1)	{	  builtin_error (_("`%c': bad command"), cmdlist[c].cmd);	  return (EX_USAGE);	}    }  for (c = 0; c < ncmd; c++)    if (ulimit_internal (cmdlist[c].cmd, cmdlist[c].arg, mode, ncmd > 1) == EXECUTION_FAILURE)      return (EXECUTION_FAILURE);  return (EXECUTION_SUCCESS);}static intulimit_internal (cmd, cmdarg, mode, multiple)     int cmd;     char *cmdarg;     int mode, multiple;{  int opt, limind, setting;  int block_factor;  RLIMTYPE soft_limit, hard_limit, real_limit, limit;  setting = cmdarg != 0;  limind = _findlim (cmd);  if (mode == 0)    mode = setting ? (LIMIT_HARD|LIMIT_SOFT) : LIMIT_SOFT;  opt = get_limit (limind, &soft_limit, &hard_limit);  if (opt < 0)    {      builtin_error (_("%s: cannot get limit: %s"), limits[limind].description,						 strerror (errno));      return (EXECUTION_FAILURE);    }  if (setting == 0)	/* print the value of the specified limit */    {      printone (limind, (mode & LIMIT_SOFT) ? soft_limit : hard_limit, multiple);      return (EXECUTION_SUCCESS);    }   /* Setting the limit. */  if (STREQ (cmdarg, "hard"))    real_limit = hard_limit;  else if (STREQ (cmdarg, "soft"))    real_limit = soft_limit;  else if (STREQ (cmdarg, "unlimited"))    real_limit = RLIM_INFINITY;  else if (all_digits (cmdarg))    {      limit = string_to_rlimtype (cmdarg);      block_factor = BLOCKSIZE(limits[limind].block_factor);      real_limit = limit * block_factor;      if ((real_limit / block_factor) != limit)	{	  sh_erange (cmdarg, _("limit"));	  return (EXECUTION_FAILURE);	}    }  else    {      sh_invalidnum (cmdarg);      return (EXECUTION_FAILURE);    }  if (set_limit (limind, real_limit, mode) < 0)    {      builtin_error (_("%s: cannot modify limit: %s"), limits[limind].description,						    strerror (errno));      return (EXECUTION_FAILURE);    }  return (EXECUTION_SUCCESS);}static intget_limit (ind, softlim, hardlim)     int ind;     RLIMTYPE *softlim, *hardlim;{  RLIMTYPE value;#if defined (HAVE_RESOURCE)  struct rlimit limit;#endif  if (limits[ind].parameter >= 256)    {      switch (limits[ind].parameter)	{	case RLIMIT_FILESIZE:	  if (filesize (&value) < 0)	    return -1;	  break;	case RLIMIT_PIPESIZE:	  if (pipesize (&value) < 0)	    return -1;	  break;	case RLIMIT_OPENFILES:	  value = (RLIMTYPE)getdtablesize ();	  break;	case RLIMIT_VIRTMEM:	  return (getmaxvm (softlim, hardlim));	case RLIMIT_MAXUPROC:	  if (getmaxuprc (&value) < 0)	    return -1;	  break;	default:	  errno = EINVAL;	  return -1;	}      *softlim = *hardlim = value;      return (0);    }  else    {#if defined (HAVE_RESOURCE)      if (getrlimit (limits[ind].parameter, &limit) < 0)	return -1;      *softlim = limit.rlim_cur;      *hardlim = limit.rlim_max;#  if defined (HPUX9)      if (limits[ind].parameter == RLIMIT_FILESIZE)	{	  *softlim *= 512;	  *hardlim *= 512;			/* Ugh. */	}      else#  endif /* HPUX9 */      return 0;#else      errno = EINVAL;      return -1;#endif    }}static intset_limit (ind, newlim, mode)     int ind;     RLIMTYPE newlim;     int mode;{#if defined (HAVE_RESOURCE)   struct rlimit limit;   RLIMTYPE val;#endif  if (limits[ind].parameter >= 256)    switch (limits[ind].parameter)      {      case RLIMIT_FILESIZE:#if !defined (HAVE_RESOURCE)	return (ulimit (2, newlim / 512L));#else	errno = EINVAL;	return -1;#endif      case RLIMIT_OPENFILES:#if defined (HAVE_SETDTABLESIZE)#  if defined (__CYGWIN__)	/* Grrr... Cygwin declares setdtablesize as void. */	setdtablesize (newlim);	return 0;#  else	return (setdtablesize (newlim));#  endif#endif      case RLIMIT_PIPESIZE:      case RLIMIT_VIRTMEM:      case RLIMIT_MAXUPROC:      default:	errno = EINVAL;	return -1;      }  else    {#if defined (HAVE_RESOURCE)      if (getrlimit (limits[ind].parameter, &limit) < 0)	return -1;#  if defined (HPUX9)      if (limits[ind].parameter == RLIMIT_FILESIZE)	newlim /= 512;				/* Ugh. */#  endif /* HPUX9 */      val = (current_user.euid != 0 && newlim == RLIM_INFINITY &&	       (mode & LIMIT_HARD) == 0 &&		/* XXX -- test */	       (limit.rlim_cur <= limit.rlim_max))		 ? limit.rlim_max : newlim;      if (mode & LIMIT_SOFT)	limit.rlim_cur = val;      if (mode & LIMIT_HARD)	limit.rlim_max = val;	        return (setrlimit (limits[ind].parameter, &limit));#else      errno = EINVAL;      return -1;#endif    }}static intgetmaxvm (softlim, hardlim)     RLIMTYPE *softlim, *hardlim;{#if defined (HAVE_RESOURCE)  struct rlimit datalim, stacklim;  if (getrlimit (RLIMIT_DATA, &datalim) < 0)    return -1;  if (getrlimit (RLIMIT_STACK, &stacklim) < 0)    return -1;  /* Protect against overflow. */  *softlim = (datalim.rlim_cur / 1024L) + (stacklim.rlim_cur / 1024L);  *hardlim = (datalim.rlim_max / 1024L) + (stacklim.rlim_max / 1024L);  return 0;#else  errno = EINVAL;  return -1;#endif /* HAVE_RESOURCE */}static intfilesize(valuep)     RLIMTYPE *valuep;{#if !defined (HAVE_RESOURCE)  long result;  if ((result = ulimit (1, 0L)) < 0)    return -1;  else    *valuep = (RLIMTYPE) result * 512;  return 0;#else  errno = EINVAL;  return -1;#endif}static intpipesize (valuep)     RLIMTYPE *valuep;{#if defined (PIPE_BUF)  /* This is defined on Posix systems. */  *valuep = (RLIMTYPE) PIPE_BUF;  return 0;#else#  if defined (_POSIX_PIPE_BUF)  *valuep = (RLIMTYPE) _POSIX_PIPE_BUF;  return 0;#  else#    if defined (PIPESIZE)  /* This is defined by running a program from the Makefile. */  *valuep = (RLIMTYPE) PIPESIZE;  return 0;#    else  errno = EINVAL;  return -1;  #    endif /* PIPESIZE */#  endif /* _POSIX_PIPE_BUF */#endif /* PIPE_BUF */}static intgetmaxuprc (valuep)     RLIMTYPE *valuep;{  long maxchild;  maxchild = getmaxchild ();  if (maxchild < 0)    {      errno = EINVAL;      return -1;    }  else    {      *valuep = (RLIMTYPE) maxchild;      return 0;    }}static voidprint_all_limits (mode)     int mode;{  register int i;  RLIMTYPE softlim, hardlim;  if (mode == 0)    mode |= LIMIT_SOFT;  for (i = 0; limits[i].option > 0; i++)    {      if (get_limit (i, &softlim, &hardlim) == 0)	printone (i, (mode & LIMIT_SOFT) ? softlim : hardlim, 1);      else if (errno != EINVAL)	builtin_error ("%s: cannot get limit: %s", limits[i].description,						   strerror (errno));    }}static voidprintone (limind, curlim, pdesc)     int limind;     RLIMTYPE curlim;     int pdesc;{  char unitstr[64];  int factor;  factor = BLOCKSIZE(limits[limind].block_factor);  if (pdesc)    {      if (limits[limind].units)	sprintf (unitstr, "(%s, -%c) ", limits[limind].units, limits[limind].option);      else        sprintf (unitstr, "(-%c) ", limits[limind].option);      printf ("%-20s %16s", limits[limind].description, unitstr);    }  if (curlim == RLIM_INFINITY)    puts ("unlimited");  else if (curlim == RLIM_SAVED_MAX)    puts ("hard");  else if (curlim == RLIM_SAVED_CUR)    puts ("soft");  else    print_rlimtype ((curlim / factor), 1);}/* Set all limits to NEWLIM.  NEWLIM currently must be RLIM_INFINITY, which   causes all limits to be set as high as possible depending on mode (like   csh `unlimit').  Returns -1 if NEWLIM is invalid, 0 if all limits   were set successfully, and 1 if at least one limit could not be set.   To raise all soft limits to their corresponding hard limits, use	ulimit -S -a unlimited   To attempt to raise all hard limits to infinity (superuser-only), use	ulimit -H -a unlimited   To attempt to raise all soft and hard limits to infinity, use	ulimit -a unlimited*/static intset_all_limits (mode, newlim)     int mode;     RLIMTYPE newlim;{  register int i;  int retval = 0;  if (newlim != RLIM_INFINITY)    {      errno = EINVAL;      return -1;    }    if (mode == 0)    mode = LIMIT_SOFT|LIMIT_HARD;  for (retval = i = 0; limits[i].option > 0; i++)    if (set_limit (i, newlim, mode) < 0)      {	builtin_error (_("%s: cannot modify limit: %s"), limits[i].description,						      strerror (errno));	retval = 1;      }  return retval;}#endif /* !_MINIX */

⌨️ 快捷键说明

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