rlimit.c

/**
   @file      rlimit.c
   @author    Mitch Richling <http://www.mitchr.me/>
   @Copyright Copyright 1999 by Mitch Richling.  All rights reserved.
   @brief     How to access rlimit values@EOL
   @Keywords  UNIX rlimit ulimit limit
   @Std       XSI

              This C program is intended to illustrate how one can
              query and modify resource limits (see ulimit & limit).
              Not all systems support all limits, so we have lots of
              #ifdef's in this code. :(

   @Tested    
              x MacOS X.4
*/

#include <stdlib.h>             /* Standard Lib    ISOC  */
#include <stdio.h>              /* I/O lib         ISOC  */
#include <string.h>             /* Strings         ISOC  */
#include <sys/resource.h>       /* limits          SUS   */

int main(int argc, char *argv[]);
void printLimit(int theLimitNum, char *theLimitStr);

int main(int argc, char *argv[]) {

#ifdef RLIMIT_CPU
  printLimit(RLIMIT_CPU, "RLIMIT_CPU (cpu time)");
#endif
#ifdef RLIMIT_FSIZE
  printLimit(RLIMIT_FSIZE, "RLIMIT_FSIZE (file size)");
#endif
#ifdef RLIMIT_DATA
  printLimit(RLIMIT_DATA, "RLIMIT_DATA (data seg size)");
#endif
#ifdef RLIMIT_STACK
  printLimit(RLIMIT_STACK, "RLIMIT_STACK (stack size)");
#endif
#ifdef RLIMIT_CORE
  printLimit(RLIMIT_CORE, "RLIMIT_CORE (core file size)");
#endif
#ifdef RLIMIT_AS
  printLimit(RLIMIT_AS, "RLIMIT_AS (resident set size)");
#endif
#ifdef RLIMIT_RSS
  printLimit(RLIMIT_RSS, "RLIMIT_RSS (resident set size)");
#endif
#ifdef RLIMIT_MEMLOCK
  printLimit(RLIMIT_MEMLOCK, "RLIMIT_MEMLOCK (locked memory)");
#endif
#ifdef RLIMIT_NPROC
  printLimit(RLIMIT_NPROC, "RLIMIT_NPROC (user processes)");
#endif
#ifdef RLIMIT_NOFILE
  printLimit(RLIMIT_NOFILE, "RLIMIT_NOFILE (open files)");
#endif

  return 0;
} /* end func main */


void printLimit(int theLimitNum, char *theLimitStr) {
  struct rlimit rlimitStruct;
  if(getrlimit(theLimitNum, &rlimitStruct) == -1) {
    printf("ERROR: getrlimit failure %s\n", theLimitStr);
    return;
  } /* end if */
  printf("%-32s   ", theLimitStr);
  if(rlimitStruct.rlim_cur == RLIM_INFINITY) 
    printf("cur: %15s   ", "INFINITY");
  else
    printf("cur: %15lld   ", (long long)rlimitStruct.rlim_cur);
  if(rlimitStruct.rlim_max == RLIM_INFINITY) 
    printf("max: %15s   ", "INFINITY");
  else
    printf("max: %15lld   ", (long long)rlimitStruct.rlim_max);
  printf("\n");

} /* end func printLimit */

Generated by GNU Enscript 1.6.5.2.