1. ホーム
  2. linux

[解決済み] Linuxの環境変数の値の最大サイズは?

2023-01-03 18:30:20

質問

Linux で環境変数に格納できるデータの量に制限はありますか。

Windowsの場合、私は以下を見つけました。 KB の記事 に要約されています。 Windows XP 以降: 8191文字 Windows 2000/NT 4.0:2047文字

どのように解決するのですか?

Linuxでは、環境変数ごとの制限はないと思います。 すべての環境変数をまとめた合計サイズは execve() の時間です。 See "引数と環境のサイズの制限" ここで を参照してください。

あるプロセスでは 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;
}