1 /* Bit values & structures for resource limits.  4.4 BSD/generic GNU version.
2    Copyright (C) 1994-2021 Free Software Foundation, Inc.
3    This file is part of the GNU C Library.
4 
5    The GNU C Library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Lesser General Public
7    License as published by the Free Software Foundation; either
8    version 2.1 of the License, or (at your option) any later version.
9 
10    The GNU C Library is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    Lesser General Public License for more details.
14 
15    You should have received a copy of the GNU Lesser General Public
16    License along with the GNU C Library; if not, see
17    <https://www.gnu.org/licenses/>.  */
18 
19 #ifndef _SYS_RESOURCE_H
20 # error "Never use <bits/resource.h> directly; include <sys/resource.h> instead."
21 #endif
22 
23 #include <bits/types.h>
24 
25 /* These are the values for 4.4 BSD and GNU.  Earlier BSD systems have a
26    subset of these kinds of resource limit.  In systems where `getrlimit'
27    and `setrlimit' are not system calls, these are the values used by the C
28    library to emulate them.  */
29 
30 /* Kinds of resource limit.  */
31 enum __rlimit_resource
32   {
33     /* Per-process CPU limit, in seconds.  */
34     RLIMIT_CPU,
35 #define	RLIMIT_CPU	RLIMIT_CPU
36     /* Largest file that can be created, in bytes.  */
37     RLIMIT_FSIZE,
38 #define	RLIMIT_FSIZE	RLIMIT_FSIZE
39     /* Maximum size of data segment, in bytes.  */
40     RLIMIT_DATA,
41 #define	RLIMIT_DATA	RLIMIT_DATA
42     /* Maximum size of stack segment, in bytes.  */
43     RLIMIT_STACK,
44 #define	RLIMIT_STACK	RLIMIT_STACK
45     /* Largest core file that can be created, in bytes.  */
46     RLIMIT_CORE,
47 #define	RLIMIT_CORE	RLIMIT_CORE
48     /* Largest resident set size, in bytes.
49        This affects swapping; processes that are exceeding their
50        resident set size will be more likely to have physical memory
51        taken from them.  */
52     RLIMIT_RSS,
53 #define	RLIMIT_RSS	RLIMIT_RSS
54     /* Locked-in-memory address space.  */
55     RLIMIT_MEMLOCK,
56 #define	RLIMIT_MEMLOCK	RLIMIT_MEMLOCK
57     /* Number of processes.  */
58     RLIMIT_NPROC,
59 #define	RLIMIT_NPROC	RLIMIT_NPROC
60     /* Number of open files.  */
61     RLIMIT_OFILE,
62     RLIMIT_NOFILE = RLIMIT_OFILE, /* Another name for the same thing.  */
63 #define	RLIMIT_OFILE	RLIMIT_OFILE
64 #define	RLIMIT_NOFILE	RLIMIT_NOFILE
65     /* Maximum size of all socket buffers.  */
66     RLIMIT_SBSIZE,
67 #define RLIMIT_SBSIZE	RLIMIT_SBSIZE
68     /* Maximum size in bytes of the process address space.  */
69     RLIMIT_AS,
70     RLIMIT_VMEM = RLIMIT_AS,	/* Another name for the same thing.  */
71 #define RLIMIT_AS	RLIMIT_AS
72 #define RLIMIT_VMEM	RLIMIT_AS
73 
74     RLIMIT_NLIMITS,		/* Number of limit flavors.  */
75     RLIM_NLIMITS = RLIMIT_NLIMITS /* Traditional name for same.  */
76   };
77 
78 /* Value to indicate that there is no limit.  */
79 #ifndef __USE_FILE_OFFSET64
80 # define RLIM_INFINITY 0x7fffffff
81 #else
82 # define RLIM_INFINITY 0x7fffffffffffffffLL
83 #endif
84 
85 #ifdef __USE_LARGEFILE64
86 # define RLIM64_INFINITY 0x7fffffffffffffffLL
87 #endif
88 
89 /* We can represent all limits.  */
90 #define RLIM_SAVED_MAX	RLIM_INFINITY
91 #define RLIM_SAVED_CUR	RLIM_INFINITY
92 
93 
94 /* Type for resource quantity measurement.  */
95 #ifndef __USE_FILE_OFFSET64
96 typedef __rlim_t rlim_t;
97 #else
98 typedef __rlim64_t rlim_t;
99 #endif
100 #ifdef __USE_LARGEFILE64
101 typedef __rlim64_t rlim64_t;
102 #endif
103 
104 struct rlimit
105   {
106     /* The current (soft) limit.  */
107     rlim_t rlim_cur;
108     /* The hard limit.  */
109     rlim_t rlim_max;
110   };
111 
112 #ifdef __USE_LARGEFILE64
113 struct rlimit64
114   {
115     /* The current (soft) limit.  */
116     rlim64_t rlim_cur;
117     /* The hard limit.  */
118     rlim64_t rlim_max;
119  };
120 #endif
121 
122 /* Whose usage statistics do you want?  */
123 enum __rusage_who
124 /* The macro definitions are necessary because some programs want
125    to test for operating system features with #ifdef RUSAGE_SELF.
126    In ISO C the reflexive definition is a no-op.  */
127   {
128     /* The calling process.  */
129     RUSAGE_SELF = 0,
130 #define RUSAGE_SELF     RUSAGE_SELF
131     /* All of its terminated child processes.  */
132     RUSAGE_CHILDREN = -1
133 #define RUSAGE_CHILDREN RUSAGE_CHILDREN
134   };
135 
136 #include <bits/types/struct_timeval.h>
137 #include <bits/types/struct_rusage.h>
138 
139 /* Priority limits.  */
140 #define PRIO_MIN        -20     /* Minimum priority a process can have.  */
141 #define PRIO_MAX        20      /* Maximum priority a process can have.  */
142 
143 /* The type of the WHICH argument to `getpriority' and `setpriority',
144    indicating what flavor of entity the WHO argument specifies.  */
145 enum __priority_which
146   {
147     PRIO_PROCESS = 0,           /* WHO is a process ID.  */
148 #define PRIO_PROCESS PRIO_PROCESS
149     PRIO_PGRP = 1,              /* WHO is a process group ID.  */
150 #define PRIO_PGRP PRIO_PGRP
151     PRIO_USER = 2               /* WHO is a user ID.  */
152 #define PRIO_USER PRIO_USER
153   };
154