一尘不染

环境变量值的最大大小是多少?

linux

在Linux上的环境变量中可以存储的数据量是否有限制,如果可以,它是什么?

对于Windows,我发现以下KB文章总结为:Windows
XP或更高版本:8191个字符Windows 2000 / NT 4.0:2047个字符


阅读 287

收藏
2020-06-02

共1个答案

一尘不染

我认为Linux上没有针对每个环境的变量限制。所有环境变量的总大小在execve()时受到限制。有关更多信息,请参见此处的“参数和环境大小的限制” 。

进程可以使用setenv()或putenv()使环境超出exec分配的初始空间。

这是一个快速而肮脏的程序,它创建一个256 MB的环境变量。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main(void)
{
    size_t size = 1 << 28; /* 256 MB */
    char *var;

    var = malloc(size);
    if (var == NULL) {
        perror("malloc");
        return 1;
    }

    memset(var, 'X', size);
    var[size - 1] = '\0';
    var[0] = 'A';
    var[1] = '=';

    if (putenv(var) != 0) {
        perror("putenv");
        return 1;
    }

/*  Demonstrate E2BIG failure explained by paxdiablo */
    execl("/bin/true", "true", (char *)NULL);
    perror("execl");


    printf("A=%s\n", getenv("A"));

    return 0;
}
2020-06-02