Blame src/regression/rlimit-open-files.c
|
Szabolcs Nagy |
a2e22a |
// rlimit should be able to set file limits
|
|
Szabolcs Nagy |
a2e22a |
#include <stdlib.h>
|
|
Szabolcs Nagy |
a2e22a |
#include <string.h>
|
|
Szabolcs Nagy |
a2e22a |
#include <errno.h>
|
|
Szabolcs Nagy |
a2e22a |
#include <unistd.h>
|
|
Szabolcs Nagy |
a2e22a |
#include <sys/resource.h>
|
|
Szabolcs Nagy |
a2e22a |
#include "test.h"
|
|
Szabolcs Nagy |
a2e22a |
|
|
Szabolcs Nagy |
a2e22a |
int main(void)
|
|
Szabolcs Nagy |
a2e22a |
{
|
|
Szabolcs Nagy |
a2e22a |
static const long lim = 42;
|
|
Szabolcs Nagy |
a2e22a |
static const int r = RLIMIT_NOFILE;
|
|
Szabolcs Nagy |
a2e22a |
struct rlimit rl;
|
|
Szabolcs Nagy |
a2e22a |
int fd, maxfd = 0;
|
|
Szabolcs Nagy |
a2e22a |
|
|
Szabolcs Nagy |
a2e22a |
rl.rlim_max = lim;
|
|
Szabolcs Nagy |
a2e22a |
rl.rlim_cur = lim;
|
|
Szabolcs Nagy |
a2e22a |
if (setrlimit(r, &rl))
|
|
Szabolcs Nagy |
a2e22a |
t_error("setrlimit(%d, %ld) failed: %s\n", r, lim, strerror(errno));
|
|
Szabolcs Nagy |
a2e22a |
if (getrlimit(r, &rl))
|
|
Szabolcs Nagy |
a2e22a |
t_error("getrlimit(%d) failed: %s\n", r, strerror(errno));
|
|
Szabolcs Nagy |
f0101b |
if (rl.rlim_max != lim || rl.rlim_cur != lim)
|
|
Szabolcs Nagy |
a2e22a |
t_error("getrlimit %d says cur=%ld,max=%ld after setting the limit to %ld\n", r, rl.rlim_cur, rl.rlim_max, lim);
|
|
Szabolcs Nagy |
a2e22a |
|
|
Szabolcs Nagy |
a2e22a |
while((fd=dup(1)) != -1)
|
|
Szabolcs Nagy |
a2e22a |
if (fd > maxfd) maxfd = fd;
|
|
Szabolcs Nagy |
a2e22a |
if (errno != EMFILE)
|
|
Szabolcs Nagy |
a2e22a |
t_error("dup(1) failed with %s, wanted EMFILE\n", strerror(errno));
|
|
Szabolcs Nagy |
a2e22a |
if (maxfd+1 != lim)
|
|
Szabolcs Nagy |
a2e22a |
t_error("more fds are open than rlimit allows: fd=%d, limit=%d\n", maxfd, lim);
|
|
Szabolcs Nagy |
a2e22a |
|
|
Szabolcs Nagy |
a2e22a |
return t_status;
|
|
Szabolcs Nagy |
a2e22a |
}
|