我认为Linux上没有每个环境变量的限制.所有环境变量的总大小限制在execve()
倍.有关更多信息,请参阅"参数和环境的大小限制"here.
一个进程可以使用setenv()
或putenv()
将环境扩展到exec分配的初始空间之外.
下面是一个快速而肮脏的程序,它创建了一个256MB的环境变量.
#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;
}