15.系统限制和选项

本文介绍了运行时恒定值、可增加值以及路径名变量值的概念,强调了这些值在不同场景下的获取方法,如sysconf()、pathconf()和fpathconf()函数的使用。通过这些函数,开发者可以在运行时检查系统的各种限制和选项。此外,文章还提到了getconf命令在shell中的应用,以及如何处理不确定的系统限制。
摘要由CSDN通过智能技术生成

概念

运行时恒定值

运行时恒定值是指某一限制,若已经在<limits.h>中定义,则对于实现而言固定。但是该值是不确定的(因为该值可能依赖于可用的内存空间),因而在<limits.h>中会忽略其定义。

这种情况可以使用sysconf()在运行时获取。

运行时可增加值

运行时可增加值是指某一限制,相对于特定实现其值固定,且运行此实现的所有系统至少都应支持这一最小值,然而,特定系统在运行时可能会增加这一最小值,可以使用sysconf()来获取系统所支持的实际值。

路径名变量值

路径名变量是指与路径名(文件、目录、终端等)相关的限制,每个限制可能是相对于某个系统实现的常量也可能随文件系统的不同而不同。在限制可能因路径名而发生变化的情况下,应用程序可以使用pathconf()fpathconf()来获取该值。

在shell中获取限制和选项:getconf

在shell中,可以使用getconf命令获取特定UNIX系统中已然实现的限制和选项。
格式一般如下:

$getconf ARG_MAX
2097152
$getconf NAME_MAX /boot
255

运行时获取系统限制

sysconf()pathconf()fpathconf()供应用程序调用以检查系统实现的限制和选项。

#include <unistd.h>
long sysconf(int name);
	Returns value of limit specified by name,
		or -1 if limit is indeterminate or an error occurred
  • 参数name应为定义于<unistd.h>文件中的_SC_系列常量之一,限制值将作为日函数结果返回。
  • 若无法确定某一限制,则sysconf()返回-1。
  • 若调用时发生错误,也会返回-1(唯一指定的错误是EINVAL,表示name无效)。

为了区别返回-1的情况,应在调用函数前将errno设置为0,如果调用返回-1,且带哦用后errno值不为0,则sysconf()调用发生错误。

限制值在进程运行期间不会改变。

运行时获取与文件相关的限制

#include <unistd.h>
long pathconf(const char *pathname, int name);
long fpathconf(int fd, int name);
	Both returns value of limit specified by name,
		or -1 if limit is indeterminate or an error occured.
  • pathconf()fpahconf()唯一的区别是对文件或目录的指定方式,前者是路径名方式,后者是文件描述符。
  • 参数name是定义于<unistd.h>中的_PC_系列常量,限制的值将作为函数调用结果返回。

限制值在进村运行期间可能会改变,例如当重新装载文件系统时。

不确定的限制

有时系统实现并未将一些系统限制定义为限制常量(比如PATH_MAX),并且sysconf()pathconf()在返回相应限制时会将其归为不确定。对此,

  1. 参考SUSv3规定的最低限制值,并结合实际。
  2. 省去限制检查,根据出错结果进行判断并重试/修改。
  3. 自行编写程序或函数对限制值进行推断或估算。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

barbyQAQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值