|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T u
Length: 2911 (0xb5f) Types: TextFile Names: »ulimit.c«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki └─⟦this⟧ »EUUGD11/euug-87hel/sec1/sh.ulimit/ulimit.c«
#ifndef lint static char RCSid[] = "$Header: ulimit.c,v 1.4 85/12/09 13:02:22 arnold Exp $"; #endif /* * $Log: ulimit.c,v $ * Revision 1.4 85/12/09 13:02:22 arnold * changed the declaration of limit to keep lint happy * * Revision 1.3 85/12/03 16:18:42 arnold * Fixed original code to use symbolic constants from the header files * Added many more commands for use with the ksh style ulimit command, * for the BSD limits. * * Revision 1.2 85/11/18 10:04:46 arnold * Updated from bare S5R2 to my first release * * Revision 1.1 85/11/15 12:19:05 arnold * Initial revision * * */ /* ulimit -- system call emulation for Bourne shell on 4.2BSD last edit: 22-Aug-1983 D A Gwyn */ #include <sys/time.h> #include <sys/resource.h> #include <errno.h> extern int getrlimit(), setrlimit(); extern int errno; #define BLOCK 512L /* all these things are done in "blocks" */ long ulimit (cmd, newlimit) int cmd; /* subcommand */ long newlimit; /* desired new limit */ { struct rlimit limit; /* data being gotten/set */ switch (cmd) { case 1: /* get file size limit */ if (getrlimit (RLIMIT_FSIZE, &limit) != 0 ) return -1L; /* errno is already set */ return limit.rlim_max / BLOCK; case 2: /* set file size limit */ limit.rlim_cur = limit.rlim_max = newlimit * BLOCK; return setrlimit (RLIMIT_FSIZE, &limit); case 3: /* get maximum break value */ if (getrlimit (RLIMIT_DATA, &limit) != 0) return -1L; /* errno is already set */ return limit.rlim_max; case 6: /* get core file size limit */ if (getrlimit (RLIMIT_CORE, &limit) != 0) return -1L; /* errno already set */ return limit.rlim_max / BLOCK; case 7: /* set core file size limit */ limit.rlim_cur = limit.rlim_max = newlimit * BLOCK; return setrlimit (RLIMIT_CORE, &limit); case 8: /* get data segment size limit */ if (getrlimit (RLIMIT_DATA, &limit) != 0) return -1L; /* errno already set */ return limit.rlim_max / BLOCK; case 9: /* set data segment size limit */ limit.rlim_cur = limit.rlim_max = newlimit * BLOCK; return setrlimit (RLIMIT_DATA, &limit); case 10: /* get physical memory limit */ if (getrlimit (RLIMIT_RSS, &limit) != 0) return -1L; /* errno already set */ return limit.rlim_max / BLOCK; case 11: /* set physical memory limit */ limit.rlim_cur = newlimit * BLOCK; return setrlimit (RLIMIT_RSS, &limit); case 12: /* get cpu time limit */ if (getrlimit (RLIMIT_CPU, &limit) != 0) return -1L; /* errno already set */ return limit.rlim_max / 1000L; /* system uses milliseconds */ case 13: /* set cpu time limit */ limit.rlim_cur = limit.rlim_max = newlimit * 1000L; return setrlimit (RLIMIT_CPU, &limit); case 4: case 5: /* These two are for getting and setting the pipe */ /* size under UNIX/RT -- not applicable here */ /* so fall thru and complain */ default: errno = EINVAL; return -1L; } }