質問

Fedora Core 7 で、以下に依存するコードを書いています。 ARG_MAX. 。しかし、たとえ私が #include <limits.h>, 、定数はまだ定義されていません。私の調査によると、それは次の場所に存在します。 <sys/linux/limits.h>, 、ただし、これは Win32/Mac/Linux 間で移植可能であると想定されているため、これを直接含めることはオプションではありません。何が起きてる?

役に立ちましたか?

解決

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

関心のある値は、実際にはハードウェアに依存するものではなく、プラットフォームごとに、またおそらくはシステム ビルドごとに異なります。

正しいことは電話することです sysconf 「ARG_MAX」または「_POSIX_ARG_MAX」を要求します。私 考える いずれにしても、それが POSIX 準拠のソリューションです。

準拠私のドキュメントでは、要求している値に基づいて unistd.h またはlimits.h の一方または両方を含めます。

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

他のヒント

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top