쉘에서 ulimit -a 명령어를 사용하면 현재 커널에 할당되어 있는 정보를 볼 수 있다.
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
max nice (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 8064
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
max rt priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 8064
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
file locks (-x) unlimited
data seg size (kbytes, -d) unlimited
max nice (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 8064
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
max rt priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 8064
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
file locks (-x) unlimited
위 항목중 open files 항목이 하나의 프로세스에서 열 수 있는 파일 디스크립터의 수 이다. ulimit -n 명령어를 사용하여 설정 할 수도 있으나 여기에서는 C 언어에서 할당하는 방법을 알아보자
#include <sys/time.h>
#include <sys/resource.h>
#include <unistd.h>
int getrlimit (int resource, struct rlimit *rlim);
int setrlimit (int resource, const struct rlimit *rlim);
struct rlimit
{
rlim_t rlim_cur; //soft
rlim_t rlim_max; //hard
};
#include <sys/resource.h>
#include <unistd.h>
int getrlimit (int resource, struct rlimit *rlim);
int setrlimit (int resource, const struct rlimit *rlim);
struct rlimit
{
rlim_t rlim_cur; //soft
rlim_t rlim_max; //hard
};
사용법은 아래와 같다.
void print_rlim()
{
struct rlimit limit;
getrlimit(RLIMIT_NOFILE, &limit);
printf("cur=%lu max=%lu\n", limit.rlim_cur, limit.rlim_max);
}
void set_rlim()
{
struct rlimit limit;
limit.rlim_cur = 20480lu;
limit.rlim_max = 20480lu;
setrlimit(RLIMIT_NOFILE, &limit);
}
{
struct rlimit limit;
getrlimit(RLIMIT_NOFILE, &limit);
printf("cur=%lu max=%lu\n", limit.rlim_cur, limit.rlim_max);
}
void set_rlim()
{
struct rlimit limit;
limit.rlim_cur = 20480lu;
limit.rlim_max = 20480lu;
setrlimit(RLIMIT_NOFILE, &limit);
}
Posted by 느긋나긋

