GETRLIMIT(2)

이름
getrlimit, getrusage, setrlimit - 자원(resource)의 제한값과 사용값을 알아내거나 설정한다.

사용법
#include <sys/time.h>
#include <sys/resource.h>
#include <unistd.h>

int getrlimit (int resource, struct rlimit *rlim);
int getrusage (int who, struct rusage *usage);
int setrlimit (int resource, const struct rlimit *rlim);

설명
getrlimit와 setrlimit는 각각 자원의 제한값들을 알아내거나 설정한다. resource는 다음 중 하나여야 한다:

RLIMIT_CPU    /* 초 단위의 CPU 시간 */
RLIMIT_FSIZE    /* 최대 파일 크기 */
RLIMIT_DATA    /* 최대 데이타 크기 */
RLIMIT_STACK    /* 최대 스택 크기 */
RLIMIT_CORE    /* 최대 코어 파일 크기 */
RLIMIT_RSS    /* 최대 거주 집합 크기 */
RLIMIT_NPROC    /* 최대 프로세스 수 */
RLIMIT_NOFILE    /* 최대 열 수 있는 파일의 수 */
RLIMIT_MEMLOCK    /* 최대 잠긴 기억 장소 주소 공간 */
RLIMIT_AS    /* 주소 공간(가상 메모리) 제한값 */

만일 RLIM_INFINITY로 설정되었다면 자원은 무제한이다. RLIMIT_OFILE는 RLIMIT_NOFILE에 대한 BSD 이름이다.

rlimit 구조체는 다음과 같다:

struct rlimit
{
	rlim_t	rlim_cur;
	rlim_t	rlim_max;
};

getrusage는 현재 자원의 사용값을 반환한다. who는 RUSAGE_SELF나 RUSAGE_CHILDREN 중 하나이다.

struct rusage
{
	struct timeval ru_utime;	/* 사용된 사용자 시간 */
	struct timeval ru_stime;	/* 사용된 시스템 시간 */
	long	ru_maxrss;		/* 최대 거주 집합 크기 */
	long	ru_ixrss;			/* 총 공유 메모리 크기 */
	long	ru_idrss;			/* 공유되지 않은 총 데이타 크기 */
	long	ru_isrss;			/* 공유되지 않은 총 스택 크기 */
	long	ru_minflt;		/* 페이지 반환(reclaims) */
	long	ru_majflt;		/* 페이지 폴트 */
	long	ru_nswap;			/* 스왑 */
	long	ru_inblock;		/* 블럭 입력 연산 */
	long	ru_oublock;		/* 블럭 출력 연산 */
	long	ru_msgsnd;		/* 보낸 메세지 */
	long	ru_msgrcv;		/* 받은 메세지 */
	long	ru_nsignals;		/* 받은 시그널 */
	long	ru_nvcsw;			/* 자발적인 문맥 교환 */
	long	ru_nivcsw;		/* 비자발적인 문맥 교환 */
};

반환값
성공시, 0이 리턴된다. 에러시, -1이 리턴되며, errno는 적당한 값으로 설정된다.

에러

EFAULT
    rlim나 usage가 접근할 수 없는 주소 공간을 가리키고 있다.

EINVAL
    getrlimit또는 setrlimit가 유효하지 않은 resource로 호출되었거나, getrusage가 유효하지 않은 who로 호출되었다.

EPERM
    비-슈퍼 유저가 소프트 제한값과 하드 제한값을 현재의 하드 제한값보다 높은 값으로 증가시키기 위해 setrlimit()를 사용하였거나, 슈퍼 유저가 현재 커널 최대값보다 큰값으로 RLIMIT_NOFILE을 변경하려고 시도했다.

호환
SVr4, BSD 4.3

관련 항목
ulimit(2), quotactl(2)

역자
정강훈 <skyeyes@soback.kornet.net>, 2000년 5월 12일