| /* Bit values & structures for resource limits.  4.4 BSD/generic GNU version. | 
 |    Copyright (C) 1994-2016 Free Software Foundation, Inc. | 
 |    This file is part of the GNU C Library. | 
 |  | 
 |    The GNU C Library is free software; you can redistribute it and/or | 
 |    modify it under the terms of the GNU Lesser General Public | 
 |    License as published by the Free Software Foundation; either | 
 |    version 2.1 of the License, or (at your option) any later version. | 
 |  | 
 |    The GNU C Library is distributed in the hope that it will be useful, | 
 |    but WITHOUT ANY WARRANTY; without even the implied warranty of | 
 |    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | 
 |    Lesser General Public License for more details. | 
 |  | 
 |    You should have received a copy of the GNU Lesser General Public | 
 |    License along with the GNU C Library; if not, see | 
 |    <http://www.gnu.org/licenses/>.  */ | 
 |  | 
 | #ifndef _SYS_RESOURCE_H | 
 | # error "Never use <bits/resource.h> directly; include <sys/resource.h> instead." | 
 | #endif | 
 |  | 
 | #include <bits/types.h> | 
 |  | 
 | /* These are the values for 4.4 BSD and GNU.  Earlier BSD systems have a | 
 |    subset of these kinds of resource limit.  In systems where `getrlimit' | 
 |    and `setrlimit' are not system calls, these are the values used by the C | 
 |    library to emulate them.  */ | 
 |  | 
 | /* Kinds of resource limit.  */ | 
 | enum __rlimit_resource | 
 |   { | 
 |     /* Per-process CPU limit, in seconds.  */ | 
 |     RLIMIT_CPU, | 
 | #define	RLIMIT_CPU	RLIMIT_CPU | 
 |     /* Largest file that can be created, in bytes.  */ | 
 |     RLIMIT_FSIZE, | 
 | #define	RLIMIT_FSIZE	RLIMIT_FSIZE | 
 |     /* Maximum size of data segment, in bytes.  */ | 
 |     RLIMIT_DATA, | 
 | #define	RLIMIT_DATA	RLIMIT_DATA | 
 |     /* Maximum size of stack segment, in bytes.  */ | 
 |     RLIMIT_STACK, | 
 | #define	RLIMIT_STACK	RLIMIT_STACK | 
 |     /* Largest core file that can be created, in bytes.  */ | 
 |     RLIMIT_CORE, | 
 | #define	RLIMIT_CORE	RLIMIT_CORE | 
 |     /* Largest resident set size, in bytes. | 
 |        This affects swapping; processes that are exceeding their | 
 |        resident set size will be more likely to have physical memory | 
 |        taken from them.  */ | 
 |     RLIMIT_RSS, | 
 | #define	RLIMIT_RSS	RLIMIT_RSS | 
 |     /* Locked-in-memory address space.  */ | 
 |     RLIMIT_MEMLOCK, | 
 | #define	RLIMIT_MEMLOCK	RLIMIT_MEMLOCK | 
 |     /* Number of processes.  */ | 
 |     RLIMIT_NPROC, | 
 | #define	RLIMIT_NPROC	RLIMIT_NPROC | 
 |     /* Number of open files.  */ | 
 |     RLIMIT_OFILE, | 
 |     RLIMIT_NOFILE = RLIMIT_OFILE, /* Another name for the same thing.  */ | 
 | #define	RLIMIT_OFILE	RLIMIT_OFILE | 
 | #define	RLIMIT_NOFILE	RLIMIT_NOFILE | 
 |     /* Maximum size of all socket buffers.  */ | 
 |     RLIMIT_SBSIZE, | 
 | #define RLIMIT_SBSIZE	RLIMIT_SBSIZE | 
 |     /* Maximum size in bytes of the process address space.  */ | 
 |     RLIMIT_AS, | 
 |     RLIMIT_VMEM = RLIMIT_AS,	/* Another name for the same thing.  */ | 
 | #define RLIMIT_AS	RLIMIT_AS | 
 | #define RLIMIT_VMEM	RLIMIT_AS | 
 |  | 
 |     RLIMIT_NLIMITS,		/* Number of limit flavors.  */ | 
 |     RLIM_NLIMITS = RLIMIT_NLIMITS /* Traditional name for same.  */ | 
 |   }; | 
 |  | 
 | /* Value to indicate that there is no limit.  */ | 
 | #ifndef __USE_FILE_OFFSET64 | 
 | # define RLIM_INFINITY 0x7fffffff | 
 | #else | 
 | # define RLIM_INFINITY 0x7fffffffffffffffLL | 
 | #endif | 
 |  | 
 | #ifdef __USE_LARGEFILE64 | 
 | # define RLIM64_INFINITY 0x7fffffffffffffffLL | 
 | #endif | 
 |  | 
 |  | 
 | /* Type for resource quantity measurement.  */ | 
 | #ifndef __USE_FILE_OFFSET64 | 
 | typedef __rlim_t rlim_t; | 
 | #else | 
 | typedef __rlim64_t rlim_t; | 
 | #endif | 
 | #ifdef __USE_LARGEFILE64 | 
 | typedef __rlim64_t rlim64_t; | 
 | #endif | 
 |  | 
 | struct rlimit | 
 |   { | 
 |     /* The current (soft) limit.  */ | 
 |     rlim_t rlim_cur; | 
 |     /* The hard limit.  */ | 
 |     rlim_t rlim_max; | 
 |   }; | 
 |  | 
 | #ifdef __USE_LARGEFILE64 | 
 | struct rlimit64 | 
 |   { | 
 |     /* The current (soft) limit.  */ | 
 |     rlim64_t rlim_cur; | 
 |     /* The hard limit.  */ | 
 |     rlim64_t rlim_max; | 
 |  }; | 
 | #endif | 
 |  | 
 | /* Whose usage statistics do you want?  */ | 
 | enum __rusage_who | 
 | /* The macro definitions are necessary because some programs want | 
 |    to test for operating system features with #ifdef RUSAGE_SELF. | 
 |    In ISO C the reflexive definition is a no-op.  */ | 
 |   { | 
 |     /* The calling process.  */ | 
 |     RUSAGE_SELF = 0, | 
 | #define RUSAGE_SELF     RUSAGE_SELF | 
 |     /* All of its terminated child processes.  */ | 
 |     RUSAGE_CHILDREN = -1 | 
 | #define RUSAGE_CHILDREN RUSAGE_CHILDREN | 
 |   }; | 
 |  | 
 | #define __need_timeval | 
 | #include <bits/time.h>           /* For `struct timeval'.  */ | 
 |  | 
 | /* Structure which says how much of each resource has been used.  */ | 
 | struct rusage | 
 |   { | 
 |     /* Total amount of user time used.  */ | 
 |     struct timeval ru_utime; | 
 |     /* Total amount of system time used.  */ | 
 |     struct timeval ru_stime; | 
 |     /* Maximum resident set size (in kilobytes).  */ | 
 |     long int ru_maxrss; | 
 |     /* Amount of sharing of text segment memory | 
 |        with other processes (kilobyte-seconds).  */ | 
 |     long int ru_ixrss; | 
 |     /* Amount of data segment memory used (kilobyte-seconds).  */ | 
 |     long int ru_idrss; | 
 |     /* Amount of stack memory used (kilobyte-seconds).  */ | 
 |     long int ru_isrss; | 
 |     /* Number of soft page faults (i.e. those serviced by reclaiming | 
 |        a page from the list of pages awaiting reallocation.  */ | 
 |     long int ru_minflt; | 
 |     /* Number of hard page faults (i.e. those that required I/O).  */ | 
 |     long int ru_majflt; | 
 |     /* Number of times a process was swapped out of physical memory.  */ | 
 |     long int ru_nswap; | 
 |     /* Number of input operations via the file system.  Note: This | 
 |        and `ru_oublock' do not include operations with the cache.  */ | 
 |     long int ru_inblock; | 
 |     /* Number of output operations via the file system.  */ | 
 |     long int ru_oublock; | 
 |     /* Number of IPC messages sent.  */ | 
 |     long int ru_msgsnd; | 
 |     /* Number of IPC messages received.  */ | 
 |     long int ru_msgrcv; | 
 |     /* Number of signals delivered.  */ | 
 |     long int ru_nsignals; | 
 |     /* Number of voluntary context switches, i.e. because the process | 
 |        gave up the process before it had to (usually to wait for some | 
 |        resource to be available).  */ | 
 |     long int ru_nvcsw; | 
 |     /* Number of involuntary context switches, i.e. a higher priority process | 
 |        became runnable or the current process used up its time slice.  */ | 
 |     long int ru_nivcsw; | 
 |   }; | 
 |  | 
 | /* Priority limits.  */ | 
 | #define PRIO_MIN        -20     /* Minimum priority a process can have.  */ | 
 | #define PRIO_MAX        20      /* Maximum priority a process can have.  */ | 
 |  | 
 | /* The type of the WHICH argument to `getpriority' and `setpriority', | 
 |    indicating what flavor of entity the WHO argument specifies.  */ | 
 | enum __priority_which | 
 |   { | 
 |     PRIO_PROCESS = 0,           /* WHO is a process ID.  */ | 
 | #define PRIO_PROCESS PRIO_PROCESS | 
 |     PRIO_PGRP = 1,              /* WHO is a process group ID.  */ | 
 | #define PRIO_PGRP PRIO_PGRP | 
 |     PRIO_USER = 2               /* WHO is a user ID.  */ | 
 | #define PRIO_USER PRIO_USER | 
 |   }; |