8.04用に作成されたUbuntu 10.04でCプログラムをコンパイルしようとしています。PATH_MAX
で定義する必要がある およびその他の定数を使用したため、失敗しますlimits.h
。さまざまなリソースによると、これは POSIX 互換の C ライブラリの一部である必要があります。
これは Ubuntu 10.04 のバグですか、それともこれを解決する適切な方法はありますか?
8.04用に作成されたUbuntu 10.04でCプログラムをコンパイルしようとしています。PATH_MAX
で定義する必要がある およびその他の定数を使用したため、失敗しますlimits.h
。さまざまなリソースによると、これは POSIX 互換の C ライブラリの一部である必要があります。
これは Ubuntu 10.04 のバグですか、それともこれを解決する適切な方法はありますか?
POSIXは、そのような多くの制限をオプションとして定義しています。で制限FOOが定義されlimits.h
ていない場合は、システムにそのような制限がないか、実行時に制限が変化するか、適用されるパス名に依存する可能性があることを意味します。このような場合、次のようにpathconf
、、、fpathconf
またはsysconf
関数と_PC_*
および_SC_*
マクロを使用します。
path_max = pathconf("/", _PC_PATH_MAX);
また:
page_size = sysconf(_SC_PAGE_SIZE);
残念ながら、GNU(GNU Cライブラリ)は、Linuxで実際に一定である場合、多くの制限を実行時変数として定義しています。制限の削除の利点。ただし、アプリケーションとカーネルの堅牢性については、(Linuxの制限と同様に)十分に大きい限り、制限を固定する方が実際にははるかに優れています。