代码之家  ›  专栏  ›  技术社区  ›  Tim unnamed eng

'sysconf()'和'getrlimit()'之间的关系和区别是什么?

  •  1
  • Tim unnamed eng  · 技术社区  · 7 年前

    两者之间的关系和区别是什么 sysconf() getrlimit() ?

    它们是否提供了两种不同的方法来报告相同资源的限制?

    我们什么时候用?

    谢谢。

    对于这两个功能,我发现了两个相互矛盾的意见:

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

    如果我没记错的话,sysconf()的内容不能被 进程(即)它们在内核级别配置,需要 重新编译要更改的操作系统内核和/或C库 他们。您只能读取这些值,但不能在运行时更改它们。

    使用setrlimit()/getrlimit(),可以读取和更改值 运行时某些资源的(合理的)。例如,您可以 调用setrlimit()设置进程的最大核心转储大小,即 如果一个进程经常崩溃,而您不想填满您的硬盘,那么很有用。 磁盘上有大文件。

    使用rlimit可以读取/设置的参数与 可以使用sysconfig()读取的参数。他们处理 不同的系统旋钮。

    sysconf()和getrlimit()返回不同资源设置的值( 无重叠 ,因此,您可以根据程序所需的信息调用适当的一个。

    但从辅助动力装置:

    例如,我们可以使用 文件描述符 命令又在伯恩建立起来了 shell更改进程可以打开的最大LES数 一次。这通常需要特殊的(超级用户) 如果限制是有效的无限制的,则提供特权。但是 一旦设置为“晚上” 系统配置 将报告long\u max作为限制 对于open_max.一个依赖此值作为上限的程序 如图2.17所示,要关闭的描述符将浪费很多 试图关闭2147483647个le描述符的时间,其中大部分 _

    支持单用户界面中XSI选项的系统 Unix规范将提供 获取限制 (2)功能(部分 7.11条)。它可以用于返回进程可以打开的最大描述符数。有了它,我们就能发现 我们的开放空间的数量没有统一的上限。 过程可以打开,所以我们可以避免这个问题。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Jean-Baptiste Yunès    7 年前

    sysconf 是一个通用函数,用于获取许多不同的值 系统配置 变量,不仅仅是资源限制。有些代表系统范围的限制。 系统配置 没有对应的设置函数(其中一些值不是动态的)。所有这些值在同一进程中的两个调用之间不应发生变化(见下面的异常)。

    getrlimit 是获取值的函数 资源限制 . 其设置对应项是 setrlimit (可能有一些限制)。

    两者都是由posix定义的,而standard除了 OPEN_MAX 在过程生命周期内可能发生变化。