sysconf()
和getrlimit()
之间的关系和区别是什么?
他们是否提供两种不同的方式来报告相同资源的限制?
我们何时使用哪个?
感谢。
我发现这两个函数有两个相互矛盾的评论:
来自http://forums.devshed.com/programming-42/whats-difference-sysconf-rlimit-955656.html
如果我没记错的话,sysconf()的东西不能被a改变 进程(即)它们在内核级别配置并需要a 重新编译要更改的操作系统内核和/或C库 他们。您只能读取这些值,但不能在运行时更改它们。
使用setrlimit()/ getrlimit(),您可以读取和更改值 (在合理范围内)运行时的某些资源。例如,你可以 调用setrlimit()来设置最大值。核心转储大小的进程,即 如果一个进程经常崩溃并且你不想填补你的努力,那就很有用 磁盘放大文件。
您可以使用rlimit读取/设置的参数与 您可以使用sysconfig()读取的参数。他们处理 不同的系统旋钮。
sysconf()和getrlimit()返回不同资源设置的值(不重叠),因此您可以根据程序搜索的信息调用相应的值。
但是来自APUE:
例如,我们可以再次使用Bourne中内置的 ulimit 命令 shell可以更改我们的进程可以打开的最大文件数 在一次。这通常需要特殊(超级用户) 如果限制要有效无限制,则享有特权。但 一旦设置为有效, sysconf 将报告LONG_MAX作为限制 对于OPEN_MAX。一个依赖于此值作为上限的程序 关闭文件描述符,如图2.17所示,将浪费很多 时间试图关闭2,147,483,647文件描述符,其中大部分 甚至没有使用。
支持Single中XSI选项的系统 UNIX规范将提供 getrlimit (2)函数(Section 7.11)。它可用于返回进程可以打开的最大描述符数。有了它,我们可以检测到它 我们的开放文件数没有配置上限 流程可以打开,所以我们可以避免这个问题。
答案 0 :(得分:2)
sysconf
是一个通用函数,用于获取许多不同系统配置变量的值,而不仅仅是资源限制。有些代表了系统范围的限制。 sysconf
没有对应的设置函数(其中一些值不是动态的)。所有这些值在同一过程中的两次调用中不得更改(请参阅下面的例外)。
getrlimit
是获取资源限制值的函数。它的设置对应是setrlimit
(可以有一些限制)。
两者都是由POSIX定义的,标准没有说明除了OPEN_MAX
之外的重叠,这可能会在过程生命周期中发生变化。