Limit.hでPATH_MAXとNAME_MAXを変更するとどうなりますか?

Limit.hでPATH_MAXとNAME_MAXを変更するとどうなりますか?

LinuxカーネルPATH_MAXNAME_MAXlimits.conf

この定数を増やしてカーネルを再コンパイルするとどうなりますか?

/usr/include/linux/limits.hまた、これを変更してlibc(およびヘッダーを含むすべてのプログラム)を再コンパイルする必要があると思います。

  1. より長いパス/名前でファイルを作成できますか?
  2. このような長いファイル名を持つファイルシステムを別のシステムにマウントするとどうなりますか?

Q2:カーネルが.より大きいパスを生成するのを防ぐことを知っています。しかし、ファイルシステム自体がそれよりも長いパス(たとえばafter)をPATH_MAX提供している場合は、それをどのように処理するかを知りたいです。ls

ベストアンサー1

  1. より長いパスを持つファイルを作成することはすでに可能です。相対パスを使用してマウントポイントを変更するなどの方法で、より長い絶対パスを持つファイルを生成でき、PATH_MAXカーネルはこれを処理する方法を既に知っています。増加PATH_MAXinclude/uapi/linux/limits.h、いいえlimits.conf)一度に処理できる最大パス長が増えます。ハード定義されていませんPATH_MAX

    NAME_MAXLinuxで使用されるほとんどのファイルシステムが制限されているため、増やすことが必ずしも大きな助けになるわけではありません。255バイトのコンポーネント名のみをサポートします。

  2. 上記のように、長いパスはすでに現実であり、Unixスタイルのシステムはそれを処理できます(相対パス、シンボリックリンクなどを使用して)。もっと長く名前などが発生することもあります。readdir予想される最大値より長い名前を返すように文書化されています。

また、見ることができますLinuxは255バイトより長いファイル名をどの程度サポートしていますか?

また、プログラムはビルドタイム定数を使用しないlimits.hでください。pathconf。残念ながら、必ずしもそうとは限らず、指定された長さを持たないユーザー空間プログラムによって提供されるバッファに書き込むとき、カーネルがより大きな合計を仮定する問題に直面する可能性が高いですPATH_MAXNAME_MAX

おすすめ記事