2008-09-05 21 views
7

Fedora Core 7では、私はARG_MAXに依存するコードを書いています。ただし、I #include <limits.h>であっても、定数はまだ定義されていません。私の調査では、それが<sys/linux/limits.h>に存在することが示されていますが、これはWin32/Mac/Linuxで移植可能であると考えられています。何が起きてる?limits.hでARG_MAXが定義されていないのはなぜですか?

答えて

8

limits.hにない理由は、現在のアーキテクチャのビット幅に基づいて整数型の値の範囲の制限を与える量ではないということです。これはISO標準によってlimits.hに割り当てられた役割です。

あなたが興味を持っている値は実際にはハードウェアではなく、プラットフォームによって異なる場合があります。システムビルドからシステムビルドまで多岐にわたります。

正しいことは、sysconfに電話し、 "ARG_MAX"または "_POSIX_ARG_MAX"を求めることです。とにかく私はだと思う。これはPOSIX準拠のソリューションだ。

Acc。私のドキュメントには、あなたが要求している値に基づいてunistd.hまたはlimits.hのいずれかまたは両方が含まれています。

他の1点:関数のexecファミリの多くの実装では、特大の環境でそれらを呼び出そうとすると、E2BIGまたは同様の値が返されます。これはexecが実際に返すことができる定義済みの条件の1つです。

-2

ARG_MAXは/usr/include/linux/limits.hで定義されています。私のLinuxカーネルのバージョンは3.2.0-38です。

関連する問題