文章目录

  • 1. 前言
  • 2. 系统配置参数
    • 2.1. 一般容量限制
    • 2.2. 整体系统选项
    • 2.3. 支持哪个版本的 POSIX
    • 2.4. 使用 sysconf
      • 2.4.1. sysconf 的定义
      • 2.4.2. sysconf 参数的常量
      • 2.4.3. sysconf 示例
    • 2.5. 一般容量限制的最小值
    • 2.6. 文件系统容量限制
    • 2.7. 文件支持中的可选功能
    • 2.8. 文件系统限制的最小值
    • 2.9. 使用 pathconf
    • 2.10. 实用程序容量限制
    • 2.11. 效用限值的最小值
    • 2.12. 字符串值参数
  • 3. 参考

1. 前言

The GNU C Library Reference Manual for version 2.35

2. 系统配置参数

System Configuration Parameters

本章中列出的函数和宏提供了有关操作系统配置参数的信息,例如容量限制、可选 POSIX 功能的存在以及可执行文件的默认路径(请参阅字符串值参数)。

2.1. 一般容量限制

General Capacity Limits

POSIX.1 和 POSIX.2 标准指定了许多描述系统容量限制的参数。这些限制可以是给定操作系统的固定常数,也可以因机器而异。例如,系统管理员可以在运行时或通过重新构建内核来配置一些限制值,这不需要重新编译应用程序。

仅当系统对所讨论的参数具有固定、统一的限制时,以下每个限制参数都有一个在 limits.h 中定义的宏。如果系统允许不同的文件系统或文件有不同的限制,那么宏是未定义的;使用 sysconf 找出在特定机器上特定时间应用的限制。请参阅使用 sysconf。

这些参数中的每一个还有另一个宏,其名称以“_POSIX”开头,它给出了任何 POSIX 系统上允许的最低值。请参阅一般容量限制的最小值。

宏:int ARG_MAX

如果已定义,则可以传递给 exec 函数的 argv 和 environ 参数的不变最大组合长度。

宏:int CHILD_MAX

如果已定义,则可以在任何时候以相同的真实用户 ID 存在的不变的最大进程数。在 BSD 和 GNU 中,这由 RLIMIT_NPROC 资源限制控制;请参阅限制资源使用。

宏:int OPEN_MAX

如果已定义,则单个进程可以同时打开的最大文件数不变。在 BSD 和 GNU 中,这由 RLIMIT_NOFILE 资源限制控制;请参阅限制资源使用。

宏:int STREAM_MAX

如果已定义,则单个进程可以同时打开的最大流数不变。请参阅打开流。

宏:int TZNAME_MAX

如果已定义,则为时区名称的不变最大长度。请参阅时区的函数和变量。

这些限制宏总是在limits.h 中定义。

宏:int NGROUPS_MAX

一个进程可以拥有的补充组 ID 的最大数量。

这个宏的值实际上是最大值的下限。也就是说,您可以指望能够拥有那么多补充组 ID,但特定的机器可能会让您拥有更多。您可以使用 sysconf 来查看特定机器是否会让您拥有更多(请参阅使用 sysconf)。

宏:ssize_t SSIZE_MAX

可以容纳 ssize_t 类型的对象的最大值。实际上,这是对单个操作中可以读取或写入的字节数的限制。

这个宏在所有 POSIX 系统中都有定义,因为这个限制是永远不可配置的。

宏:int RE_DUP_MAX

在正则表达式的构造“{min,max}”中允许保证的最大重复次数。

这个宏的值实际上是最大值的下限。也就是说,您可以指望能够进行如此多的重复,但一台特定的机器可能会让您拥有更多。您可以使用 sysconf 来查看特定机器是否会让您拥有更多(请参阅使用 sysconf)。甚至 sysconf 告诉您的值也只是一个下限——更大的值可能会起作用。

这个宏在所有 POSIX.2 系统中都有定义,因为 POSIX.2 表示即使没有特定的限制,也应该始终定义它。

2.2. 整体系统选项

Overall System Options

POSIX 定义了并非所有 POSIX 系统都支持的某些特定于系统的选项。由于这些选项是在内核中提供的,而不是在库中,因此仅使用 GNU C 库并不能保证支持任何这些特性;这取决于您使用的系统。

您可以使用本节中的宏以及函数 sysconf 来测试给定选项的可用性。仅当您包含 unistd.h 时才会定义宏。

对于以下宏,如果宏在 unistd.h 中定义,则支持该选项。否则,可能支持也可能不支持该选项;使用 sysconf 找出答案。请参阅使用 sysconf。

宏:int _POSIX_JOB_CONTROL

如果定义了该符号,则表示系统支持任务控制。否则,实现的行为就像会话中的所有进程都属于单个进程组一样。请参阅任务控制。符合 POSIX 2001 版或更新版本的系统将始终定义此符号。

宏:int _POSIX_SAVED_IDS

如果定义了该符号,则表示系统在执行设置了 set-user-ID 或 set-group-ID 位的可执行文件之前,系统会记住进程的有效用户 ID 和组 ID,并且显式更改有效用户或返回这些值的组 ID 是允许的。如果未定义此选项,则如果非特权进程将其有效用户或组 ID 更改为进程的真实用户或组 ID,则无法再次将其更改回来。请参阅启用和禁用 Setuid 访问。

对于下面的宏,如果宏定义在 unistd.h 中,那么它的值表示该选项是否被支持。-1 值表示否,任何其他值表示是。如果未定义宏,则可能支持也可能不支持该选项;使用 sysconf 找出答案。请参阅使用 sysconf。

宏:int _POSIX2_C_DEV

如果定义了此符号,则表明系统具有 POSIX.2 C 编译器命令 c89。GNU C 库始终将其定义为 1,假设如果您没有 C 编译器就不会安装它。

宏:int _POSIX2_FORT_DEV

如果定义了此符号,则表明系统具有 POSIX.2 Fortran 编译器命令 fort77。GNU C 库从未定义过这一点,因为我们不知道系统有什么。

宏:int _POSIX2_FORT_RUN

如果定义了此符号,则表明系统具有 POSIX.2 asa 命令来解释 Fortran 回车控制。GNU C 库从未定义过这一点,因为我们不知道系统有什么。

宏:int _POSIX2_LOCALEDEF

如果定义了这个符号,则表明系统有 POSIX.2 localedef 命令。GNU C 库从未定义过这一点,因为我们不知道系统有什么。

宏:int _POSIX2_SW_DEV

如果定义了此符号,则表明系统具有 POSIX.2 命令 ar、make 和 strip。GNU C 库总是将其定义为 1,假设您必须拥有 ar 和 make 才能安装库,并且当它们存在时 strip 不太可能不存在。

2.3. 支持哪个版本的 POSIX

Which Version of POSIX is Supported

宏:long int _POSIX_VERSION

此常量表示实现所遵循的 POSIX.1 标准的版本。对于符合 1995 POSIX.1 标准的实现,该值是整数 199506L。

_POSIX_VERSION 总是在任何 POSIX 系统中定义(在 unistd.h 中)。

使用注意事项:不要试图通过包含 unistd.h 然后检查是否定义了 _POSIX_VERSION 来测试系统是否支持 POSIX。在非 POSIX 系统上,这可能会失败,因为没有 unistd.h。我们不知道有什么方法可以在编译时可靠地测试您的目标系统是否支持 POSIX 或 unistd.h 是否存在。

宏:long int _POSIX2_C_VERSION

此常量表示库和系统内核支持的 POSIX.2 标准的版本。我们不知道这对于 POSIX.2 标准的第一个版本会有什么价值,因为该价值是基于该标准正式采用的年份和月份。

此符号的值与系统上安装的实用程序无关。

使用说明:您可以使用此宏来判断 POSIX.1 系统库是否也支持 POSIX.2。任何 POSIX.1 系统都包含 unistd.h,因此请包含该文件,然后测试定义 (_POSIX2_C_VERSION)。

2.4. 使用 sysconf

Using sysconf

当您的系统具有可配置的系统限制时,您可以使用 sysconf 函数找出适用于任何特定机器的值。函数和相关的参数常量在头文件 unistd.h 中声明。

2.4.1. sysconf 的定义

Definition of sysconf

函数:long int sysconf (int parameter)

Preliminary: | MT-Safe env | AS-Unsafe lock heap | AC-Unsafe lock mem fd | See POSIX Safety Concepts.。

该函数用于查询运行时系统参数。参数参数应该是下面列出的“SC”符号之一。

sysconf 的正常返回值是您请求的值。如果实现没有施加限制,并且出现错误,则返回值 -1。

为此函数定义了以下 errno 错误条件:

EINVAL

参数值无效。

2.4.2. sysconf 参数的常量

Constants for sysconf Parameters

以下是用作 sysconf 参数的符号常量。这些值都是整数常量(更具体地说,是枚举类型值)。

_SC_ARG_MAX

查询ARG_MAX对应的参数。

_SC_CHILD_MAX

查询CHILD_MAX对应的参数。

_SC_OPEN_MAX

查询OPEN_MAX对应的参数。

_SC_STREAM_MAX

查询STREAM_MAX对应的参数。

_SC_TZNAME_MAX

查询TZNAME_MAX对应的参数。

_SC_NGROUPS_MAX

查询 NGROUPS_MAX 对应的参数。

_SC_JOB_CONTROL

查询_POSIX_JOB_CONTROL对应的参数。

_SC_SAVED_IDS

查询_POSIX_SAVED_IDS对应的参数。

_SC_VERSION

查询_POSIX_VERSION对应的参数。

_SC_CLK_TCK

查询每秒时钟滴答数;请参阅 CPU 时间查询。相应的参数 CLK_TCK 已过时。

_SC_CHARCLASS_NAME_MAX

查询扩展语言环境规范中字符类名允许的最大长度对应的参数。这些扩展尚未标准化,因此此选项也未标准化。

_SC_REALTIME_SIGNALS

查询_POSIX_REALTIME_SIGNALS对应的参数。

_SC_PRIORITY_SCHEDULING

查询_POSIX_PRIORITY_SCHEDULING对应的参数。

_SC_TIMERS

查询_POSIX_TIMERS对应的参数。

_SC_ASYNCHRONOUS_IO

查询_POSIX_ASYNCHRONOUS_IO对应的参数。

_SC_PRIORITIZED_IO

查询_POSIX_PRIORITIZED_IO对应的参数。

_SC_SYNCHRONIZED_IO

查询_POSIX_SYNCHRONIZED_IO对应的参数。

_SC_FSYNC

查询_POSIX_FSYNC对应的参数。

_SC_MAPPED_FILES

查询_POSIX_MAPPED_FILES对应的参数。

_SC_MEMLOCK

查询_POSIX_MEMLOCK对应的参数。

_SC_MEMLOCK_RANGE

查询_POSIX_MEMLOCK_RANGE对应的参数。

_SC_MEMORY_PROTECTION

查询_POSIX_MEMORY_PROTECTION对应的参数。

_SC_MESSAGE_PASSING

查询_POSIX_MESSAGE_PASSING对应的参数。

_SC_SEMAPHORES

查询_POSIX_SEMAPHORES 对应的参数。

_SC_SHARED_MEMORY_OBJECTS

查询_POSIX_SHARED_MEMORY_OBJECTS对应的参数。

_SC_AIO_LISTIO_MAX

查询_POSIX_AIO_LISTIO_MAX对应的参数。

_SC_AIO_MAX

查询_POSIX_AIO_MAX对应的参数。

_SC_AIO_PRIO_DELTA_MAX

询问进程可以从自己的调度优先级降低其异步 I/O 优先级的值。这对应于运行时不变值 AIO_PRIO_DELTA_MAX。

_SC_DELAYTIMER_MAX

查询_POSIX_DELAYTIMER_MAX对应的参数。

_SC_MQ_OPEN_MAX

查询_POSIX_MQ_OPEN_MAX对应的参数。

_SC_MQ_PRIO_MAX

查询_POSIX_MQ_PRIO_MAX对应的参数。

_SC_RTSIG_MAX

查询_POSIX_RTSIG_MAX对应的参数。

_SC_SEM_NSEMS_MAX

查询_POSIX_SEM_NSEMS_MAX对应的参数。

_SC_SEM_VALUE_MAX

查询_POSIX_SEM_VALUE_MAX对应的参数。

_SC_SIGQUEUE_MAX

查询_POSIX_SIGQUEUE_MAX对应的参数。

_SC_TIMER_MAX

查询_POSIX_TIMER_MAX对应的参数。

_SC_PII

查询_POSIX_PII对应的参数。

_SC_PII_XTI

查询_POSIX_PII_XTI对应的参数。

_SC_PII_SOCKET

查询_POSIX_PII_SOCKET对应的参数。

_SC_PII_INTERNET

查询_POSIX_PII_INTERNET对应的参数。

_SC_PII_OSI

查询_POSIX_PII_OSI对应的参数。

_SC_SELECT

查询_POSIX_SELECT对应的参数。

_SC_UIO_MAXIOV

查询_POSIX_UIO_MAXIOV对应的参数。

_SC_PII_INTERNET_STREAM

查询_POSIX_PII_INTERNET_STREAM对应的参数。

_SC_PII_INTERNET_DGRAM

查询_POSIX_PII_INTERNET_DGRAM对应的参数。

_SC_PII_OSI_COTS

查询_POSIX_PII_OSI_COTS对应的参数。

_SC_PII_OSI_CLTS

查询_POSIX_PII_OSI_CLTS对应的参数。

_SC_PII_OSI_M

查询_POSIX_PII_OSI_M对应的参数。

_SC_T_IOV_MAX

查询与 T_IOV_MAX 变量关联的值。

_SC_THREADS

查询_POSIX_THREADS 对应的参数。

_SC_THREAD_SAFE_FUNCTIONS

查询_POSIX_THREAD_SAFE_FUNCTIONS对应的参数。

_SC_GETGR_R_SIZE_MAX

查询_POSIX_GETGR_R_SIZE_MAX对应的参数。

_SC_GETPW_R_SIZE_MAX

查询_POSIX_GETPW_R_SIZE_MAX对应的参数。

_SC_LOGIN_NAME_MAX

查询_POSIX_LOGIN_NAME_MAX对应的参数。

_SC_TTY_NAME_MAX

查询_POSIX_TTY_NAME_MAX对应的参数。

_SC_THREAD_DESTRUCTOR_ITERATIONS

查询_POSIX_THREAD_DESTRUCTOR_ITERATIONS对应的参数。

_SC_THREAD_KEYS_MAX

查询_POSIX_THREAD_KEYS_MAX对应的参数。

_SC_THREAD_STACK_MIN

查询_POSIX_THREAD_STACK_MIN对应的参数。

_SC_THREAD_THREADS_MAX

查询_POSIX_THREAD_THREADS_MAX对应的参数。

_SC_THREAD_ATTR_STACKADDR

查询_POSIX_THREAD_ATTR_STACKADDR对应的参数。

_SC_THREAD_ATTR_STACKSIZE

查询_POSIX_THREAD_ATTR_STACKSIZE对应的参数。

_SC_THREAD_PRIORITY_SCHEDULING

查询_POSIX_THREAD_PRIORITY_SCHEDULING对应的参数。

_SC_THREAD_PRIO_INHERIT

查询_POSIX_THREAD_PRIO_INHERIT对应的参数。

_SC_THREAD_PRIO_PROTECT

查询_POSIX_THREAD_PRIO_PROTECT对应的参数。

_SC_THREAD_PROCESS_SHARED

查询_POSIX_THREAD_PROCESS_SHARED对应的参数。

_SC_2_C_DEV

查询系统是否有POSIX.2 C编译命令c89。

_SC_2_FORT_DEV

查询系统是否有POSIX.2 Fortran编译命令fort77。

_SC_2_FORT_RUN

查询系统是否有 POSIX.2 asa 命令来解释 Fortran 回车控制。

_SC_2_LOCALEDEF

查询系统是否有 POSIX.2 localedef 命令。

_SC_2_SW_DEV

查询系统是否有 POSIX.2 命令 ar、make 和 strip。

_SC_BC_BASE_MAX

在 bc 实用程序中查询 obase 的最大值。

_SC_BC_DIM_MAX

在 bc 实用程序中查询数组的最大大小。

_SC_BC_SCALE_MAX

在 bc 实用程序中查询 scale 的最大值。

_SC_BC_STRING_MAX

在 bc 实用程序中查询字符串常量的最大大小。

_SC_COLL_WEIGHTS_MAX

询问在定义语言环境的整理顺序时必须使用的最大权重数。

_SC_EXPR_NEST_MAX

使用 expr 实用程序时,查询嵌套在括号内的表达式的最大数量。

_SC_LINE_MAX

询问 POSIX.2 文本实用程序可以处理的最大文本行大小。

_SC_EQUIV_CLASS_MAX

查询可以分配给语言环境定义中 LC_COLLATE 类别“订单”关键字条目的最大权重数。GNU C 库目前不支持语言环境定义。

_SC_VERSION

查询库和内核支持的 POSIX.1 的版本号。

_SC_2_VERSION

查询系统实用程序支持的 POSIX.2 的版本号。

_SC_PAGESIZE

查询机器的虚拟内存页面大小。getpagesize 返回相同的值(请参阅如何获取有关内存子系统的信息?)。

_SC_NPROCESSORS_CONF

查询配置的处理器数量。

_SC_NPROCESSORS_ONLN

在线查询处理器数量。

_SC_PHYS_PAGES

查询系统中的物理页数。

_SC_AVPHYS_PAGES

查询系统中可用的物理页数。

_SC_ATEXIT_MAX

查询有多少个函数可以注册为atexit的终止函数;请参阅退出时的清理。

_SC_LEVEL1_ICACHE_SIZE

查询一级指令缓存的大小。

_SC_LEVEL1_ICACHE_ASSOC

查询一级指令缓存的关联性。

_SC_LEVEL1_ICACHE_LINESIZE

查询一级指令缓存的行长。

在 aarch64 上,返回的缓存线大小是用户空间可观察到的最小指令缓存线大小。这通常与 L1 icache 大小相同,但在某些内核上可能并非如此。但是,架构中规定了缓存行失效等操作与该变量报告的大小一致。

_SC_LEVEL1_DCACHE_SIZE

查询一级数据缓存的大小。

_SC_LEVEL1_DCACHE_ASSOC

查询一级数据缓存的关联性。

_SC_LEVEL1_DCACHE_LINESIZE

查询一级数据缓存的行长。

在 aarch64 上,返回的缓存线大小是用户空间可观察到的最小数据缓存线大小。这通常与 L1 dcache 大小相同,但在某些内核上可能并非如此。但是,架构中规定了缓存行失效等操作与该变量报告的大小一致。

_SC_LEVEL2_CACHE_SIZE

查询二级缓存的大小。

_SC_LEVEL2_CACHE_ASSOC

查询二级缓存的关联性。

_SC_LEVEL2_CACHE_LINESIZE

查询二级缓存的行长。

_SC_LEVEL3_CACHE_SIZE

查询三级缓存的大小。

_SC_LEVEL3_CACHE_ASSOC

查询三级缓存的关联性。

_SC_LEVEL3_CACHE_LINESIZE

查询三级缓存的行长。

_SC_LEVEL4_CACHE_SIZE

查询四级缓存的大小。

_SC_LEVEL4_CACHE_ASSOC

查询四级缓存的关联性。

_SC_LEVEL4_CACHE_LINESIZE

查询四级缓存的行长。

_SC_XOPEN_VERSION

查询_XOPEN_VERSION对应的参数。

_SC_XOPEN_XCU_VERSION

查询_XOPEN_XCU_VERSION对应的参数。

_SC_XOPEN_UNIX

查询_XOPEN_UNIX 对应的参数。

_SC_XOPEN_REALTIME

查询_XOPEN_REALTIME对应的参数。

_SC_XOPEN_REALTIME_THREADS

查询_XOPEN_REALTIME_THREADS对应的参数。

_SC_XOPEN_LEGACY

查询_XOPEN_LEGACY对应的参数。

_SC_XOPEN_CRYPT

查询_XOPEN_CRYPT 对应的参数。GNU C 库不再实现 _XOPEN_CRYPT 扩展,因此“sysconf (_SC_XOPEN_CRYPT)”总是返回 -1。

_SC_XOPEN_ENH_I18N

查询_XOPEN_ENH_I18N对应的参数。

_SC_XOPEN_SHM

查询_XOPEN_SHM对应的参数。

_SC_XOPEN_XPG2

查询_XOPEN_XPG2对应的参数。

_SC_XOPEN_XPG3

查询_XOPEN_XPG3 对应的参数。

_SC_XOPEN_XPG4

查询_XOPEN_XPG4对应的参数。

_SC_CHAR_BIT

查询 char 类型变量中的位数。

_SC_CHAR_MAX

查询可以存储在 char 类型变量中的最大值。

_SC_CHAR_MIN

查询可以存储在 char 类型变量中的最小值。

_SC_INT_MAX

查询可以存储在 int 类型变量中的最大值。

_SC_INT_MIN

查询可以存储在 int 类型变量中的最小值。

_SC_LONG_BIT

查询 long int 类型变量的位数。

_SC_WORD_BIT

查询一个寄存器字变量的位数。

_SC_MB_LEN_MAX

查询宽字符值的多字节表示的最大长度。

_SC_NZERO

查询用于在内部表示流程执行的零优先级的值。

_SC_SSIZE_MAX

查询可以存储在 ssize_t 类型变量中的最大值。

_SC_SCHAR_MAX

查询可以存储在有符号字符类型变量中的最大值。

_SC_SCHAR_MIN

查询可以存储在有符号字符类型变量中的最小值。

_SC_SHRT_MAX

查询可以存储在 short int 类型变量中的最大值。

_SC_SHRT_MIN

查询可以存储在 short int 类型变量中的最小值。

_SC_UCHAR_MAX

查询可以存储在 unsigned char 类型变量中的最大值。

_SC_UINT_MAX

查询可以存储在 unsigned int 类型变量中的最大值。

_SC_ULONG_MAX

查询可以存储在 unsigned long int 类型变量中的最大值。

_SC_USHRT_MAX

查询可以存储在 unsigned short int 类型变量中的最大值。

_SC_NL_ARGMAX

查询NL_ARGMAX对应的参数。

_SC_NL_LANGMAX

查询NL_LANGMAX对应的参数。

_SC_NL_MSGMAX

查询NL_MSGMAX对应的参数。

_SC_NL_NMAX

查询NL_NMAX对应的参数。

_SC_NL_SETMAX

查询NL_SETMAX对应的参数。

_SC_NL_TEXTMAX

查询NL_TEXTMAX对应的参数。

_SC_MINSIGSTKSZ

查询所需的最小可用堆栈空间字节数,以保证成功、非嵌套地处理处理程序为空函数的单个信号。

_SC_SIGSTKSZ

询问信号堆栈所需的建议的最小堆栈空间字节数。

除了调用单个、非嵌套的空处理程序之外,这不能保证足以满足任何特定目的,但对于涉及简单信号处理程序和非常低级别的信号嵌套(例如,2 或最多3级)。

提供此值是为了方便开发人员并简化从旧版 SIGSTKSZ 常量的迁移。需要更强保证的程序应尽可能避免使用它。

2.4.3. sysconf 示例

Examples of sysconf

我们建议您首先测试您感兴趣的参数的宏定义,并仅在未定义宏时调用 sysconf。例如,这里是如何测试是否支持任务控制:

int
have_job_control (void)
{#ifdef _POSIX_JOB_CONTROLreturn 1;
#elseint value = sysconf (_SC_JOB_CONTROL);if (value < 0)/* If the system is that badly wedged,there’s no use trying to go on.  */fatal (strerror (errno));return value;
#endif
}

以下是如何获取数值限制的值:

int
get_child_max ()
{#ifdef CHILD_MAXreturn CHILD_MAX;
#elseint value = sysconf (_SC_CHILD_MAX);if (value < 0)fatal (strerror (errno));return value;
#endif
}

2.5. 一般容量限制的最小值

Minimum Values for General Capacity Limits

以下是系统限制参数的 POSIX 最小上限的名称。这些值的意义在于,您可以安全地推到这些限制,而无需检查您使用的特定系统是否可以走那么远。

_POSIX_AIO_LISTIO_MAX

POSIX 允许在列表 I/O 调用中指定的最大 I/O 操作数的最严格限制。该常数的值为 2;因此,您最多可以添加两个未完成操作列表的新条目。

_POSIX_AIO_MAX

POSIX 允许的最大未完成异步 I/O 操作数的最严格限制。这个常数的值为1。所以你不能指望你可以发出多个操作并立即继续正常工作,异步接收通知。

_POSIX_ARG_MAX

此宏的值是 POSIX 允许的最大限制,即可以传递给 exec 函数的 argv 和 environ 参数的最大组合长度。它的值为 4096。

_POSIX_CHILD_MAX

该宏的值是 POSIX 允许的对每个真实用户 ID 的最大同时进程数的最严格限制。它的值为 6。

_POSIX_NGROUPS_MAX

此宏的值是 POSIX 允许的对每个进程的最大补充组 ID 数量的最严格限制。它的值为 0。

_POSIX_OPEN_MAX

该宏的值是 POSIX 允许的对单个进程可以同时打开的最大文件数的最严格限制。它的值为 16。

_POSIX_SSIZE_MAX

此宏的值是 POSIX 允许的对可存储在 ssize_t 类型对象中的最大值的最严格限制。它的值为 32767。

_POSIX_STREAM_MAX

该宏的值是 POSIX 允许的对单个进程可以同时打开的最大流数的最严格限制。它的值为 8。

_POSIX_TZNAME_MAX

此宏的值是 POSIX 允许的对时区名称最大长度的最严格限制。它的值为 3。

_POSIX2_RE_DUP_MAX

此宏的值是 POSIX 允许的对正则表达式中“{min,max}”构造中使用的数字的最严格限制。它的值为 255。

2.6. 文件系统容量限制

Limits on File System Capacity

POSIX.1 标准指定了许多描述文件系统限制的参数。系统可能对参数有一个固定的、统一的限制,但这不是通常的情况。在大多数系统上,不同的文件系统(对于某些参数,甚至是不同的文件)可能具有不同的最大限制。例如,如果您使用 NFS 从其他机器挂载某些文件系统,则很可能出现这种情况。

仅当系统对相关参数具有固定、统一的限制时,才会在 limits.h 中定义以下每个宏。如果系统允许不同的文件系统或文件有不同的限制,那么宏是未定义的;使用 pathconf 或 fpathconf 找出适用于特定文件的限制。请参阅使用 pathconf。

每个参数还有另一个宏,其名称以“_POSIX”开头,它给出了任何 POSIX 系统上允许的最低值。请参阅文件系统限制的最小值。

宏:int LINK_MAX

给定文件的名称数量的统一系统限制(如果有)。请参阅硬链接。

宏:int MAX_CANON

启用输入编辑时,输入行中文本量的统一系统限制(如果有)。请参阅两种输入方式:规范或非规范。

宏:int MAX_INPUT

预先输入作为输入的字符总数的统一系统限制(如果有)。请参阅 I/O 队列。

宏:int NAME_MAX

文件名组件长度的统一系统限制(如果有),不包括终止空字符。

可移植性注意:在某些系统上,GNU C 库定义了 NAME_MAX,但实际上并没有强制执行此限制。

宏:int PATH_MAX

整个文件名长度的统一系统限制(如果有)(即,为系统调用提供的参数,例如 open),包括终止空字符。

可移植性注意:即使定义了 PATH_MAX,GNU C 库也不会强制执行此限制。

宏:int PIPE_BUF

可以以原子方式写入管道的字节数的统一系统限制(如果有)。如果多个进程同时写入同一管道,则来自不同进程的输出可能会以这种大小的块交错。请参阅管道和 FIFO。

这些是某些相同信息的替代宏名称。

宏:int MAXNAMLEN

这是 NAME_MAX 的 BSD 名称。它在dirent.h 中定义。

宏:int FILENAME_MAX

该宏的值是一个整数常量表达式,表示文件名字符串的最大长度。它在 stdio.h 中定义。

与 PATH_MAX 不同,即使没有施加实际限制,也会定义此宏。在这种情况下,它的值通常是一个非常大的数字。在 GNU/Hurd 系统上总是如此。

使用说明:不要使用 FILENAME_MAX 作为存储文件名的数组的大小!你不可能做一个那么大的数组!请改用动态分配(请参阅为程序数据分配存储)。

2.7. 文件支持中的可选功能

Optional Features in File Support

POSIX 在系统调用中定义了某些特定于系统的选项以对文件进行操作。一些系统支持这些选项,而另一些则不支持。由于这些选项是在内核中提供的,而不是在库中,因此仅使用 GNU C 库并不能保证支持这些特性中的任何一个;这取决于您使用的系统。它们还可以在单​​个机器上的文件系统之间变化。

本节介绍您可以测试以确定您的机器是否支持特定选项的宏。如果在 unistd.h 中定义了给定的宏,则其值表示是否支持相应的功能。(-1 值表示否;任何其他值表示是。)如果宏未定义,则表示特定文件可能支持也可能不支持该功能。

由于所有支持 GNU C 库的机器也支持 NFS,所以永远无法对是否所有文件系统都支持 _POSIX_CHOWN_RESTRICTED 和 _POSIX_NO_TRUNC 特性做出一般性的陈述。因此,这些名称在 GNU C 库中从未定义为宏。

宏:int _POSIX_CHOWN_RESTRICTED

如果此选项有效,则 chown 函数将受到限制,因此允许对非特权进程的唯一更改是将文件的组所有者更改为进程的有效组 ID 或其补充组 ID 之一。请参阅文件所有者。

宏:int _POSIX_NO_TRUNC

如果此选项有效,超过 NAME_MAX 的文件名组件会生成 ENAMETOOLONG 错误。否则,太长的文件名组件将被静默截断。

宏:unsigned char _POSIX_VDISABLE

此选项仅对作为终端设备的文件有意义。如果启用,则可以单独禁用对特殊控制字符的处理。请参阅特殊字符。

如果这些宏之一未定义,则意味着该选项可能对某些文件有效,而对其他文件无效。要查询特定文件,请调用 pathconf 或 fpathconf。请参阅使用 pathconf。

2.8. 文件系统限制的最小值

Minimum Values for File System Limits

以下是上述某些参数的 POSIX 最小上限的名称。这些值的意义在于,您可以安全地推到这些限制,而无需检查您使用的特定系统是否可以走那么远。在大多数情况下,GNU 系统没有这些严格的限制。如有必要,应要求实际限制。

_POSIX_LINK_MAX

POSIX 允许的文件链接计数最大值的最严格限制。该常数的值为 8;因此,您始终可以为一个文件命名多达八个名称,而不会遇到系统限制。

_POSIX_MAX_CANON

POSIX 允许的对来自终端设备的规范输入行中的最大字节数的最严格限制。该常数的值为 255。

_POSIX_MAX_INPUT

POSIX 允许的对终端设备输入队列(或预输入缓冲区)中最大字节数的最严格限制。请参阅输入模式。该常数的值为 255。

_POSIX_NAME_MAX

POSIX 允许的对文件名组件中最大字节数的最严格限制。该常数的值为 14。

_POSIX_PATH_MAX

POSIX 允许的对文件名中最大字节数的最严格限制。该常数的值为 256。

_POSIX_PIPE_BUF

POSIX 允许的最严格的限制,即可以以原子方式写入管道的最大字节数。该常数的值为 512。

SYMLINK_MAX

符号链接中的最大字节数。

POSIX_REC_INCR_XFER_SIZE

文件传输大小在 POSIX_REC_MIN_XFER_SIZE 和 POSIX_REC_MAX_XFER_SIZE 值之间的推荐增量。

POSIX_REC_MAX_XFER_SIZE

建议的最大文件传输大小。

POSIX_REC_MIN_XFER_SIZE

建议的最小文件传输大小。

POSIX_REC_XFER_ALIGN

推荐的文件传输缓冲区对齐。

2.9. 使用 pathconf

Using pathconf

当您的机器允许不同的文件具有不同的文件系统参数值时,您可以使用本节中的函数找出适用于任何特定文件的值。

这些函数和参数参数的相关常量在头文件 unistd.h 中声明。

函数:long int pathconf (const char *filename, int parameter)

Preliminary: | MT-Safe | AS-Unsafe lock heap | AC-Unsafe lock fd mem | See POSIX Safety Concepts.

此函数用于查询适用于名为 filename 的文件的限制。

参数参数应该是下面列出的“PC”常量之一。

pathconf 的正常返回值是您请求的值。如果实现没有施加限制,并且出现错误,则返回值 -1。在前一种情况下,没有设置 errno,而在后一种情况下,设置了 errno 以指示问题的原因。因此,稳健地使用此函数的唯一方法是在调用之前将 0 存储到 errno 中。

除了通常的文件名错误(请参阅文件名错误)之外,还为此函数定义了以下错误条件:

EINVAL

参数值无效,或者实现不支持特定文件的参数。

函数:long int fpathconf (int filedes, int parameter)

Preliminary: | MT-Safe | AS-Unsafe lock heap | AC-Unsafe lock fd mem | See POSIX Safety Concepts.

这就像 pathconf 一样,只是使用打开的文件描述符来指定请求信息的文件,而不是文件名。

为此函数定义了以下 errno 错误条件:

EBADF

filedes 参数不是有效的文件描述符。

EINVAL

参数值无效,或者实现不支持特定文件的参数。

以下是可用作 pathconf 和 fpathconf 的参数参数的符号常量。这些值都是整数常量。

_PC_LINK_MAX

查询 LINK_MAX 的值。

_PC_MAX_CANON

查询 MAX_CANON 的值。

_PC_MAX_INPUT

查询 MAX_INPUT 的值。

_PC_NAME_MAX

查询 NAME_MAX 的值。

_PC_PATH_MAX

查询PATH_MAX 的值。

_PC_PIPE_BUF

查询PIPE_BUF的值。

_PC_CHOWN_RESTRICTED

查询 _POSIX_CHOWN_RESTRICTED 的值。

_PC_NO_TRUNC

查询 _POSIX_NO_TRUNC 的值。

_PC_VDISABLE

查询 _POSIX_VDISABLE 的值。

_PC_SYNC_IO

查询 _POSIX_SYNC_IO 的值。

_PC_ASYNC_IO

查询 _POSIX_ASYNC_IO 的值。

_PC_PRIO_IO

查询_POSIX_PRIO_IO 的值。

_PC_FILESIZEBITS

查询文件系统上大文件的可用性。

_PC_REC_INCR_XFER_SIZE

查询 POSIX_REC_INCR_XFER_SIZE 的值。

_PC_REC_MAX_XFER_SIZE

查询 POSIX_REC_MAX_XFER_SIZE 的值。

_PC_REC_MIN_XFER_SIZE

查询 POSIX_REC_MIN_XFER_SIZE 的值。

_PC_REC_XFER_ALIGN

查询 POSIX_REC_XFER_ALIGN 的值。

可移植性说明:在某些系统上,GNU C 库不强制执行 _PC_NAME_MAX 或 _PC_PATH_MAX 限制。

2.10. 实用程序容量限制

Utility Program Capacity Limits

POSIX.2 标准指定了您可以通过 sysconf 访问的某些系统限制,这些限制适用于实用程序行为,而不是库或操作系统的行为。

GNU C 库为这些限制定义了宏,如果您询问,sysconf 会为它们返回值;但这些值没有传达任何有意义的信息。它们只是 POSIX.2 允许的最小值。

宏:int BC_BASE_MAX

bc 实用程序保证支持的最大 obase 值。

宏:int BC_DIM_MAX

bc 实用程序保证支持的一个数组中的最大元素数。

宏:int BC_SCALE_MAX

bc 实用程序保证支持的最大规模值。

宏:int BC_STRING_MAX

bc 实用程序保证支持的一个字符串常量中的最大字符数。

宏:int COLL_WEIGHTS_MAX

在定义区域设置的整理顺序时必须使用的最大权重数。

宏:int EXPR_NEST_MAX

expr 实用程序可以嵌套在括号内的最大表达式数。

宏:int LINE_MAX

面向文本的 POSIX.2 实用程序可以支持的最大文本行。(如果您使用这些实用程序的 GNU 版本,那么除了可用虚拟内存施加的限制外,没有实际限制,但库无法告诉您这一点。)

宏:int EQUIV_CLASS_MAX

可以分配给语言环境定义中 LC_COLLATE 类别“订单”关键字的条目的最大权重数。GNU C 库目前不支持语言环境定义。

2.11. 效用限值的最小值

Minimum Values for Utility Limits

_POSIX2_BC_BASE_MAX

POSIX.2 允许的对 bc 实用程序中 obase 最大值的最严格限制。它的值为 99。

_POSIX2_BC_DIM_MAX

POSIX.2 允许的对 bc 实用程序中数组最大大小的最严格限制。它的值为 2048。

_POSIX2_BC_SCALE_MAX

POSIX.2 允许的对 bc 实用程序中的最大值的最严格限制。它的值为 99。

_POSIX2_BC_STRING_MAX

POSIX.2 允许的对 bc 实用程序中字符串常量的最大大小的最严格限制。它的值为 1000。

_POSIX2_COLL_WEIGHTS_MAX

POSIX.2 允许的最严格的限制,用于定义区域设置的整理顺序时必须使用的最大权重数。它的值为 2。

_POSIX2_EXPR_NEST_MAX

使用 expr 实用程序时,POSIX.2 对嵌套在括号内的表达式的最大数量所允许的最严格的限制。它的值为 32。

_POSIX2_LINE_MAX

POSIX.2 允许的对文本实用程序可以处理的最大文本行大小的最严格限制。它的值为 2048。

_POSIX2_EQUIV_CLASS_MAX

POSIX.2 允许的最严格的限制,即可以分配给语言环境定义中 LC_COLLATE 类别“订单”关键字的条目的最大权重数。它的值为 2。GNU C 库目前不支持语言环境定义。

2.12. 字符串值参数

String-Valued Parameters

POSIX.2 定义了一种使用函数 confstr 从操作系统获取字符串值参数的方法:

函数:size_t confstr (int parameter, char *buf, size_t len)

Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.

此函数读取字符串值系统参数的值,将字符串存储到从 buf 开始的 len 个字节的内存空间中。参数参数应该是下面列出的“CS”符号之一。

confstr 的正常返回值是您要求的字符串值的长度。如果为 buf 提供空指针,则 confstr 不会尝试存储字符串;它只是返回它的长度。值 0 表示错误。

如果您要求的字符串对于缓冲区来说太长(即比 len - 1 长),那么 confstr 就存储这么多(为终止的空字符留出空间)。您可以看出这是因为 confstr 返回的值大于或等于 len。

为此函数定义了以下 errno 错误条件:

EINVAL

参数值无效。

目前,您只能使用 confstr 读取一个参数:

_CS_PATH

此参数的值是搜索可执行文件的推荐默认路径。这是用户在登录后默认拥有的路径。

_CS_LFS_CFLAGS

如果使用 _LARGEFILE_SOURCE 功能选择宏编译源代码,则返回的字符串指定必须为 C 编译器提供哪些附加标志;请参阅功能测试宏。

_CS_LFS_LDFLAGS

如果使用 _LARGEFILE_SOURCE 功能选择宏编译源代码,则返回的字符串指定必须为链接器提供哪些附加标志;请参阅功能测试宏。

_CS_LFS_LIBS

如果使用 _LARGEFILE_SOURCE 功能选择宏编译源,返回的字符串指定必须将哪些附加库链接到应用程序;请参阅功能测试宏。

_CS_LFS_LINTFLAGS

如果使用 _LARGEFILE_SOURCE 功能选择宏编译源代码,则返回的字符串指定必须为 lint 工具提供哪些附加标志;请参阅功能测试宏。

_CS_LFS64_CFLAGS

如果使用 _LARGEFILE64_SOURCE 功能选择宏编译源代码,则返回的字符串指定必须为 C 编译器提供哪些附加标志;请参阅功能测试宏。

_CS_LFS64_LDFLAGS

如果使用 _LARGEFILE64_SOURCE 功能选择宏编译源代码,则返回的字符串指定必须为链接器提供哪些附加标志;请参阅功能测试宏。

_CS_LFS64_LIBS

如果使用 _LARGEFILE64_SOURCE 功能选择宏编译源代码,则返回的字符串指定必须将哪些附加库链接到应用程序;请参阅功能测试宏。

_CS_LFS64_LINTFLAGS

如果使用 _LARGEFILE64_SOURCE 功能选择宏编译源代码,则返回的字符串指定必须为 lint 工具提供哪些附加标志;请参阅功能测试宏。

使用 confstr 对字符串大小没有任何任意限制的方法是调用它两次:首先调用它来获取长度,相应地分配缓冲区,然后再次调用 confstr 来填充缓冲区,如下所示:

char *
get_default_path (void)
{size_t len = confstr (_CS_PATH, NULL, 0);char *buffer = (char *) xmalloc (len);if (confstr (_CS_PATH, buf, len + 1) == 0){free (buffer);return NULL;}return buffer;
}

3. 参考

  • System Configuration Parameters

glibc 知:手册32:系统配置相关推荐

  1. glibc 知:构建2.34版本

    文章目录 获取版本 构建安装 测试 testrun.sh strace 获取版本 主页:https://www.gnu.org/software/libc 这里选择任意一个压缩包下载即可. 构建安装 ...

  2. glibc 知:测试套件

    文章目录 前言 测试套件目标 只测试一项测试 ABI检查 有关 make xcheck 特定测试的详细信息 编写测试用例 使用交叉编译器进行测试 已知的测试套件失败 abi-check bug-ate ...

  3. glibc 知:手册05:字符串和数组

    文章目录 1. 前言 2. 字符串和数组实用程序 2.1. 字符串的表示 2.2. 字符串和数组约定 2.3. 字符串长度 2.4. 复制字符串和数组 2.5. 连接字符串 2.6. 复制时截断字符串 ...

  4. glibc 知:手册06:字符集处理

    文章目录 1. 前言 2. 字符集处理 2.1. 扩展字符简介 2.2. 字符处理函数概述 2.3. 可重启的多字节转换函数 2.3.1. 选择转换及其属性 2.3.2. 表示转换的状态 2.3.3. ...

  5. glibc 知:手册21:日期和时间

    文章目录 1. 前言 2. 日期和时间 2.1. 时间基础 2.2. 时间类型 2.3. 计算经过时间 2.4. 处理器和 CPU 时间 2.4.1. CPU时间查询 2.4.2. 处理器时间查询 2 ...

  6. glibc 知:手册12:输入/输出流

    文章目录 1. 前言 2. 输入/输出流 2.1. 流 2.2. 标准流 2.3. 打开流 2.4. 关闭流 2.5. 流和线程 2.6. 国际化应用程序中的流 2.7. 按字符或行的简单输出 2.8 ...

  7. glibc 知:手册14:文件系统接口

    文章目录 1. 前言 2. 文件系统接口 2.1. 工作目录 2.2. 访问目录 2.2.1. 目录条目的格式 2.2.2. 打开目录流 2.2.3. 读取和关闭目录流 2.2.4. 列出目录的简单程 ...

  8. glibc 知:手册84:附录E:平台特定设施

    文章目录 1. 前言 2. 附录 E 平台特定设施 2.1. PowerPC 特定设施 2.2. RISC-V 特定设施 2.3. X86 特定设施 3. 参考 1. 前言 The GNU C Lib ...

  9. glibc 知:内容

    文章目录 1. 前言 2. 内容 2.1. Error Reporting 错误报告 2.2. Virtual Memory Allocation And Paging 虚拟内存分配和分页 2.3. ...

最新文章

  1. 微信开发者和其他服务器区别,求教微信公众号开发中两种认证技术的区别?
  2. @Autowire 和 @Resource 注解使用的正确姿势,别再用错的了!!
  3. DNS隐蔽通道 是可以通过dig 子域名来追踪其真实IP的
  4. SCANF SCANF_S
  5. 利用software center在线更新windows 10 1909失败
  6. flutter 返回指定界面_Flutter页面路由导航及传参
  7. LeetCode meituan-001. 小美的用户名
  8. ThinkPHP6内核学生成绩管理系统源码 内附安装说明
  9. 太空战机c语言源码,funcode编写的太空战机
  10. Java分布式二手房项目尚好房第二课 用户角色管理
  11. linux宽松模式,三星N9200刷机包 V35.0 自编译官方内核 Selinux置为宽松模式 修复问题 稳定流畅...
  12. linux命令大全密码修改,linux修改密码命令
  13. protoc执行命令
  14. 如何用echarts创建市区地图
  15. Java实现简易版金山打字
  16. 创新、协调、绿色、开放、共享”五大发展理念整体上是一个彼此之间有联系、成结构的体系,是统一的,而从个体上来说,他们之间是相互促进、相互依赖、相互作用、相互对立的,这恰恰体现出辩证法物质世界的普遍联系和
  17. Mybatis笔记(视频是动力节点王妈妈10.5小时)
  18. 信用社考试计算机知识,农村信用社考试计算机知识模拟试题及答案
  19. C#练习题答案: 寻找恩人【难度:1级】--景越C#经典编程题库,1000道C#基础练习题等你来挑战
  20. 多个lmg在盒子里在左浮动( float: left)时候出现横向图片中间有缝隙

热门文章

  1. HTTPS是李逵还是李鬼?全看你用啥证书
  2. 实战项目(一)嵌入式基础学习与上位机入门设计
  3. liveServer无法打开浏览器
  4. Hadoop——健康检测
  5. php任意文件删除漏洞,myblog/phpyun4.3任意文件删除漏洞.md at master · source-trace/myblog · GitHub...
  6. Android studio学习(一)
  7. abb机器人建立工件坐标系_ABB机器人培训-定义坐标系.ppt
  8. 直接引用vue.js,也可以出效果。但是这样的利弊在哪?搭建脚手架的利弊又是什么呢?
  9. 凡客诚品站点打不开:页面显示域名到期了!
  10. vivado如何添加xci文件