Linux编程入门-系统选项

系统限制

常用系统限制如下,部分不存在运行时恒定值,部分运行时可增加值规则变化而省略。运行时恒定值通常在limits.h中定义,运行时可增加值用sysconf/pathconf等获取。例如当某限制名为XXX_MAX时,其最小值的运行时恒定值格式一般为_POSIX_XXX_MAX,运行时可增加值格式一般为_SC_XXX_MAX。可用命令行工具getconf获取系统中已实现的运行时恒定值,开发时可用autoconf等工具确定各种系统特性及限制存在与否、如何设置,并生成头文件。

运行时恒定值 运行时可增加值 描述
ARG_MAX 提供给exec的argv和environ所占空间之和最大字节数
_SC_CLK_TCK times度量单位
LOGIN_NAME_MAX 登录名最大长度,含终止空字符
OPEN_MAX 进程同时可打开的文件描述符的最大数量
NGROUPS_MAX 进程所属辅助组ID数量最大数
_SC_PAGESIZE或_SC_PAGE_SIZE 一个虚拟内存页大小
RTSIG_MAX 单一实时信号最大数
SIGQUEUE_MAX 排队实时信号最大数
STREAM_MAX 同时可打开stdio流最大数
NAME_MAX 文件名最大字节长度,终止空字符除外
PATH_MAX 路径名最大字节长度,含终止空字符
PIPE_BUF 一次性写入管道或FIFO中最大字节数
MQ_PRIO_MAX

sysconf

运行时获取系统限制值。该函数获取的值在调用进程的生命周期中保持不变,用setrlimit等函数除外。

1
2
3
4
#include <unistd.h>
long sysconf(
int name //运行时可增加值
); //无法确定或错误返回-1 返回-1且errno不为0时发生错误

文件限制

常用文件限制如下:

文件限制 描述
_PC_NAME_MAX 对于目录,返回该目录下文件名最大长度
_PC_PATH_MAX 对于目录,返回该目录下相对路径名最大长度
_PC_PIPE_BUF 对于FIFO或管道,返回一个应用于引用文件的值。对于目录,返回值应用于该目录下创建的一个FIFO。

pathconf/fpathconf

运行时获取文件限制值。pathconf用路径名,fpathconf用已打开的文件描述符。

1
2
3
4
5
6
7
8
long fpathconf(
int fd,
int name
);
long pathconf(
const char *path,
int name
);