getrlimit(), getrlimit64()

Получить ограничения по использованию ресурсов

Прототип:

#include <sys/resource.h>
int getrlimit( int resource,
struct rlimit *rlp );
int getrlimit64( int resource,
struct rlimit64 *rlp );

Аргументы:

resource
Ресурс, ограничение которого вы хотите получить; один из следующих:
RLIMIT_AS
RLIMIT_CORE
RLIMIT_CPU
RLIMIT_DATA
RLIMIT_FSIZE
RLIMIT_MEMLOCK
RLIMIT_NOFILE
RLIMIT_NPROC
RLIMIT_NTHR
RLIMIT_OFILE
RLIMIT_RSS
RLIMIT_STACK
RLIMIT_VMEM
Описание и действия, предпринимаемые при превышении текущего ограничения, см. в setrlimit().
rlp
Указатель на структуру struct rlimit или struct rlimit64, где функция может хранить ограничение для ресурса.

Библиотека:

libc

Описание:

Функция getrlimit() устанавливает ограничения на потребление различных системных ресурсов процессом и каждым процессом, который он создает. Функция getrlimit64() является 64-битной версией getrlimit().

Каждый вызов getrlimit() определяет конкретный ресурс, над которым нужно работать, а также ограничение ресурса. Ограничение ресурса - это пара значений:

Процесс может изменить мягкие ограничения на любое значение, которое меньше или равно жесткому ограничению. Процесс может (необратимо) снизить свое жесткое ограничение до любого значения, которое больше или равно мягкому ограничению. Только процесс с эффективным идентификатором пользователя root может установить жесткое ограничение. Как жесткие, так и мягкие ограничения можно изменить одним вызовом setrlimit() с учетом ограничений, описанных выше. Ограничения могут иметь «бесконечное» значение RLIM_INFINITY.

Поскольку информация об ограничениях хранится в информации о каждом процессе, встроенная команда оболочки ulimit (см. ksh в Справочнике по Утилитам) должна непосредственно выполнить этот системный вызов, если он повлияет на все будущие процессы, создаваемые оболочкой.

На эти параметры влияют значения текущего ограничения следующих ресурсов:

Ресурс Параметр
RLIMIT_FSIZE FCHR_MAX
RLIMIT_NOFILE OPEN_MAX

При использовании getrlimit(), если ограничение ресурса может быть правильно представлено в объекте типа rlim_t, то возвращается его представление; в противном случае, если значение ограничения ресурса равно значению соответствующего сохраненного жесткого ограничения, возвращается значение RLIM_SAVED_MAX; в противном случае возвращается значение RLIM_SAVED_CUR.

Допускается ограничение, значение которого больше RLIM_INFINITY.

Семейство функций exec*() также приводит к сохранению ограничений ресурсов.

Возвращаемое значение:

0
Успешное завершение.
-1
Возникла ошибка. Код ошибки записан в errno.

Коды ошибок:

EFAULT
Аргумент rlp указывает на недопустимый адрес.
EINVAL
Указан недопустимый ресурс.
EPERM
Ограничение, указанное для setrlimit() привело бы к увеличению максимального значения ограничения, а эффективный пользователь вызывающего процесса не является суперпользователем.

Примеры:

#include <stdio.h>
#include <stdlib.h>
#include <sys/resource.h>
int main( void )
{
struct rlimit curr_limits;
if ( getrlimit( RLIMIT_NPROC, &curr_limits ) == -1 )
{
perror( "The call to getrlimit() failed." );
return (EXIT_FAILURE);
} else {
printf( "The current maximum number of processes is %d.\n", (int)curr_limits.rlim_cur );
printf( "The hard limit on the number of processes is %d.\n", (int)curr_limits.rlim_max );
}
return (EXIT_SUCCESS);
}

Классификация:

getrlimit() — POSIX 1003.1 XSI; getrlimit64() — Поддержка больших файлов

Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Тематические ссылки:

rlim_t, rlim64_t, struct rlimit, struct rlimit64 brk(), execl(), execle(), execlp(), execlpe(), execv(), execve(), execvp(), execvpe(), fork(), getdtablesize(), malloc(), open(), setrlimit(), setrlimit64(), signal(), sysconf()

ulimit - встроенная команда (см. запись для ksh в Справочнике по Утилитам)




Предыдущий раздел: Описание API системной библиотеки