sysconf()getrlimit()之间有什么关系和区别?
它们是否提供了两种不同的方法来报告相同资源的限制?
我们什么时候用哪个?
谢谢。
关于这两项职能,我发现了两个相互矛盾的意见:
http://forums.devshed.com/programming-42/whats-difference-sysconf-rlimit-955656.html
如果我没记错的话,sysconf()的内容不能被
进程(即)它们在内核级配置,需要一个
重新编译要更改的操作系统内核和/或C库
他们。您只能读取这些值,但不能在运行时更改它们。
使用setrlimit()/getrlimit()可以读取和更改值
(在合理的范围内)在运行时的某些资源。例如,你可以
调用setrlimit()设置进程的最大核心转储大小,即
如果进程经常崩溃,并且您不想填满
用大文件盘起来。
可以用rlimit读取/设置的参数与
可以使用sysconfig()读取的参数。他们处理
不同的系统旋钮。
sysconf()和getrlimit()返回不同资源设置的值(没有重叠),因此您可以根据程序寻找的信息调用相应的设置。
但是来自apue:
例如,我们可以再次使用bourne中内置的ulimit命令
shell来改变我们的进程可以打开的最大数量
一次。这通常需要特殊的(超级用户)
特权,如果限制是有效的无限制的。但是
一旦设置为in finite,sysconf将报告long_max作为限制
对于open_max,一个依赖这个值作为上限的程序
如图2.17所示,要关闭的所有描述符将浪费大量资源
有时间尝试关闭2147483647个文件描述符,其中大部分
都不用了。
在单个系统中支持xsi选项的系统
Unix规范将提供getrlimit(2)功能(部分
7.11条)。它可以用来返回进程可以打开的描述符的最大数量。有了它,我们可以发现
我们的开盘数量没有设定上限
进程可以打开,所以我们可以避免这个问题。

最佳答案

sysconf是一个通用函数,用于获取许多不同系统配置变量的值,而不仅仅是资源限制。有些代表全系统的限制。sysconf没有设置功能对应项(其中一些值不是动态的)。所有这些值不应在同一进程中的两个调用之间发生变化(见下面的异常)。
getrlimit是获取资源限制值的函数。它的设置对应项是setrlimit(可能有一些限制)。
两者都是由posix定义的,除了OPEN_MAX可能在进程生命周期中发生变化之外,standard对重叠只字未提。

关于c - sysconf()和getrlimit()有什么关系和区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50596153/

10-11 16:34