#include <stdio.h>
#include <sys/time.h>
#include <sys/resource.h>
/*keinerlei Limits (unbegrenzt)*/
#define NO_LIMIT RLIM_INFINITY

enum{ERROR=-1, SUCCESS};

int limit_wert[] = {RLIMIT_CORE, RLIMIT_CPU, RLIMIT_DATA, RLIMIT_FSIZE,
                    RLIMIT_MEMLOCK, RLIMIT_NOFILE, RLIMIT_NPROC, RLIMIT_OFILE,
                    RLIMIT_RSS, RLIMIT_STACK, /*RLIMIT_VMEM*/};

char *limit_name[] = {"RLIMIT_CORE","RLIMIT_CPU","RLIMIT_DATA","RLIMIT_FSIZE",
                      "RLIMIT_MEMLOCK","RLIMIT_NOFILE","RLIMIT_NPROC","RLIMIT_OFILE",
                      "RLIMIT_RSS","RLIMIT_STACK",/*"RLIMIT_VMEM",*/NULL};

void read_limit(int resource, char *name)
{
   struct rlimit limit;

   /*Wir Erfragen nach dem Limit 'resource'*/
   if(getrlimit(resource, &limit) == ERROR)
     {
       printf("Fehler bei getrlimit...\n");
       exit(0);
     }

   printf("%15s | Soft-Limit : ",name);

   if(limit.rlim_cur == NO_LIMIT)
       printf("unbegrenzt |");
   else
       printf("%12ld |",limit.rlim_cur);

   printf("Hard-Limit : ");
   if(limit.rlim_max == NO_LIMIT)
       printf("unbegrenzt |");
   else
       printf("%12ld|",limit.rlim_max);

   if(limit.rlim_cur == limit.rlim_max)
       printf("(Soft-Limit = maximal)\n");
   else
       printf("(Soft-Limt = erweiterbar\n");
}


int main()
{
   int i;

   for(i=0; limit_name[i]!= NULL; i++)
       read_limit(limit_wert[i], limit_name[i]);
   return 0;
}