私Linuxの255バイトファイル名の制限についてお問い合わせください。昨日の答えは、これが簡単に変更できない、または変更できない制限です。ただし、ほとんどのLinuxでは、最大ファイル名長が255 UTF-16文字のNTFSをサポートしていることを覚えています。
そこでNTFSパーティションを作成し、UTF-8で480バイトの160文字の日本語文字列でファイル名を指定しようとしました。うまくいかないと思っていましたが、下図のように動作しました。ファイル名が480バイトの場合、どのように機能しますか? 255バイト制限は特定のファイルシステムにのみ適用されますか? Linuxはデフォルトで255バイトより長いファイル名を処理できますか?
----追信-----
文字列の始まりは次のとおりです。有名な日本古代文献「首都院長の本」。これは文字列です。
ゆく河の流れは极えずして、いいももとの水にあなりず。よどmilに float取り除きます。 世中にあRU人とsumikaと、またなakuのごとましたましきの街のうちに、尾根とべ、甍を競争にへRU、高い木、謙虚なしき、人の生まひは、 세상을 거쳐 takekiせないものであるが、とれをまとなと看ぬれれば、西ありしfamilyは珍しくなる。
使ったこのWebアプリケーションUTF-8バイトを計算します。
ベストアンサー1
答えは通常「状況によって異なります」です。
特に、最大ファイル名の長さを255として報告するNTFSの実装statvfs
したがって、呼び出し側はNTFSで有効なファイル名を回避するために255バイトの制限として解釈できます。ただし、ほとんどのプログラムは、これを事前に確認せずに(確認さえせずに)エラーをキャッチするためにエラーにNAME_MAX
依存しています。ENAMETOOLONG
ほとんどの場合、重要な制限は、ファイル名を操作するときに通常バッファを割り当てるのに使用されるわけではないことPATH_MAX
ですNAME_MAX
(オペレーティングシステムが期待どおりにパスバッファを動的に割り当てないプログラムの場合)。ハード任意の制限なし)。
NTFS実装自体は、ファイル名の長さ(バイト)を解決しませんが、常に255個の2バイト要素の配列で表示できない2バイト文字を識別するとエラーになりますENAMETOOLONG
。
NTFSは通常、LinuxのFUSEドライバによって処理されます。カーネルドライバ現時点ではUCS-2文字のみがサポートされていますが、ヒューズドライバUTF-16代理ペアをサポートします(文字の長さはそれに応じて短くなります)。