]> mj.ucw.cz Git - libucw.git/blob - lib/perl/Ulimit/Ulimit.xs
7aea4740c24ed7d3acf45d40ed9dee9a2e548dca
[libucw.git] / lib / perl / Ulimit / Ulimit.xs
1 /*
2  * PerlXS module for managing process limits
3  *
4  * (c) 2003 Tomas Valla <tom@ucw.cz>
5  *
6  */
7
8 #include "EXTERN.h"
9 #include "perl.h"
10 #include "XSUB.h"
11
12 #include <sys/resource.h>
13 #include <unistd.h>
14
15
16 MODULE = Sherlock::Ulimit               PACKAGE = Sherlock::Ulimit              
17
18 PROTOTYPES: ENABLED
19
20 int
21 setlimit(IN resource, IN soft, IN hard)
22         int resource
23         int soft
24         int hard
25 CODE:
26         struct rlimit rl;
27         int r;
28
29         switch(resource) {
30         case 0:
31                 r = RLIMIT_CPU; break;
32         case 1:
33                 r = RLIMIT_FSIZE; break;
34         case 2:
35                 r = RLIMIT_DATA; break;
36         case 3:
37                 r = RLIMIT_STACK; break;
38         case 4:
39                 r = RLIMIT_CORE; break;
40         case 5:
41                 r = RLIMIT_RSS; break;
42         case 6:
43                 r = RLIMIT_NPROC; break;
44         case 7:
45                 r = RLIMIT_NOFILE; break;
46         case 8:
47                 r = RLIMIT_MEMLOCK; break;
48         case 9:
49                 r = RLIMIT_AS; break;
50         }
51         rl.rlim_cur = soft;
52         rl.rlim_max = hard;
53         RETVAL = setrlimit(r, &rl);
54 OUTPUT:
55         RETVAL
56
57
58 int
59 getlimit(IN resource, OUT soft, OUT hard)
60         int resource
61         int soft
62         int hard
63 CODE:
64         struct rlimit rl;
65         int r;
66
67         switch(resource) {
68         case 0:
69                 r = RLIMIT_CPU; break;
70         case 1:
71                 r = RLIMIT_FSIZE; break;
72         case 2:
73                 r = RLIMIT_DATA; break;
74         case 3:
75                 r = RLIMIT_STACK; break;
76         case 4:
77                 r = RLIMIT_CORE; break;
78         case 5:
79                 r = RLIMIT_RSS; break;
80         case 6:
81                 r = RLIMIT_NPROC; break;
82         case 7:
83                 r = RLIMIT_NOFILE; break;
84         case 8:
85                 r = RLIMIT_MEMLOCK; break;
86         case 9:
87                 r = RLIMIT_AS; break;
88         }
89
90         RETVAL = getrlimit(r, &rl);
91         soft = rl.rlim_cur;
92         hard = rl.rlim_max;
93 OUTPUT:
94         RETVAL
95
96