Каковы отношения и различия между `sysconf ()` и `getrlimit ()`? - PullRequest
0 голосов
/ 30 мая 2018

Каковы отношения и различия между sysconf() и getrlimit()?

Предоставляют ли они два разных способа сообщить о лимитах одних и тех же ресурсов?

Когда мы будем использовать какие?

Спасибо.

Я нашелдва противоречивых комментария к двум функциям:

From http://forums.devshed.com/programming-42/whats-difference-sysconf-rlimit-955656.html

Если я правильно помню, то sysconf () не может быть изменен процессом (то есть), на который они настроеныуровень ядра и требуется перекомпиляция ядра операционной системы и / или библиотек C для их изменения.Вы можете только читать эти значения, но не изменять их во время выполнения.

С помощью setrlimit () / getrlimit () вы можете читать и изменять значения (в пределах разумного) определенных ресурсов во время выполнения.Например, вы можете вызвать setrlimit (), чтобы установить макс.размер дампа ядра процесса, который полезен, если процесс часто аварийно завершается, и вы не хотите заполнять жесткий диск большими файлами.

Параметры, которые вы можете прочитать / установить с помощью rlimit, отличаются отпараметры, которые вы можете прочитать с помощью sysconfig ().Они работают с различными системными регуляторами.

sysconf () и getrlimit () возвращают значения различных настроек ресурса ( без перекрытия ), поэтому вы вызываете соответствующий в зависимости от того, какая информация в вашей программеseeks.

Но из APUE:

Например, мы можем использовать команду ulimit , встроенную в оболочку Bourne-again, чтобы изменить максимумколичество файлов, которые наши процессы могут открыть одновременно.Это обычно требует специальных (суперпользовательских) привилегий, если ограничение должно быть фактически неограниченным.Но как только он будет установлен в бесконечность, sysconf сообщит LONG_MAX как предел для OPEN_MAX.Программа, которая полагается на это значение как верхнюю границу дескрипторов файлов для закрытия, как показано на рисунке 2.17, будет тратить много времени, пытаясь закрыть 2 147 483 647 дескрипторов файлов, большинство из которых даже не используются.

Системы, которые поддерживают опцию XSI в спецификации Single UNIX, будут обеспечивать функцию getrlimit (2) (раздел 7.11).Его можно использовать для возврата максимального количества дескрипторов, которые может открыть процесс.С его помощью мы можем обнаружить, что нет заданной верхней границы для числа открытых файлов, которые могут открывать наши процессы, поэтому мы можем избежать этой проблемы.

1 Ответ

0 голосов
/ 30 мая 2018

sysconf - это функция общего назначения, позволяющая получить значение множества различных системных настроек переменных, а не только ограничений ресурсов.Некоторые представляют общесистемные ограничения.sysconf не имеет аналога функции настройки (некоторые из этих значений не являются динамическими).Все эти значения не должны изменяться при двух вызовах в одном и том же процессе (см. Исключение ниже).

getrlimit - это функция для получения значения ограничения ресурса .Его установочный аналог - setrlimit (для которого могут быть некоторые ограничения).

Оба определены в POSIX, и стандарт ничего не говорит о перекрытии, кроме OPEN_MAX, которое может измениться в течение времени жизни процесса.

...