在Linux上的环境变量中可以存储的数据量是否有限制,如果可以,它是什么?
对于Windows,我发现以下KB文章总结为:Windows XP或更高版本:8191个字符Windows 2000 / NT 4.0:2047个字符
我认为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; }