teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

修正

2019/05/17 03:57

投稿

dodox86
dodox86

スコア9416

answer CHANGED
@@ -16,9 +16,9 @@
16
16
  [Microsoft Docs - File System Functionality Comparison](https://docs.microsoft.com/en-us/windows/desktop/fileio/filesystem-functionality-comparison)
17
17
  こちらの記述にはPATH長として32,760文字との記載がある
18
18
 
19
- ext4がファイル名とディレクトリ名がそれぞれ単独で255バイト、ディレクトリ数は制限がありませんので、理論的に考えるとディレクトリを掘り進めることでPATHの長さに制限が無くなります。外部ストレージで使われるであろうexFATは、ファイル名が255文字、PATH名は32,760文字です。尚、ext4 ではバイト単位、exFATは文字(UNICODE UTF16)単位と言う点も注意する必要があります。
19
+ ext4がファイル名とディレクトリ名がそれぞれ単独で255バイト、ディレクトリ数は制限がありませんので、理論的に考えるとディレクトリを掘り進めることでPATHの長さに制限が無くなります。外部ストレージで使われるであろうexFATは、ファイル名が255文字、PATH名は32,760文字です。尚、ext4 ではバイト単位、exFATは文字(UNICODE UTF-16)単位と言う点も注意する必要があります。
20
20
 
21
- ここから話が少し複雑になりますが、実際にファイルやディレクトリを操作する為にファイルシステムにアクセスする際、AndroidアプリはAndroid Runtimeを介し、linuxのシステムコールへと行き着きます。内部の詳細は私自身も把握している訳ではありませんが、その途中でC言語ベースで作られたコードがあり、それらはPATH名の最大長として適時、ヘッダーファイル limits.h で定義される`PATH_MAX`マクロを使っているものと思われます。AndroidのOSカーネルはLinuxベースですが、そのLinux上で使う場合のlimits.hにおける`PATH_MAX{は以下のようになっていて、末端のNULL文字を入れて最大で4096バイトです。
21
+ ここから話が少し複雑になりますが、実際にファイルやディレクトリを操作する為にファイルシステムにアクセスする際、AndroidアプリはAndroid Runtimeを介し、linuxのシステムコールへと行き着きます。内部の詳細は私自身も把握している訳ではありませんが、その途中でC言語ベースで作られたコードがあり、それらはPATH名の最大長として適時、ヘッダーファイル limits.h で定義される`PATH_MAX`マクロを使っているものと思われます。AndroidのOSカーネルはLinuxベースですが、そのLinux上で使う場合のlimits.hにおける`PATH_MAX`は以下のようになっていて、末端のNULL文字を入れて最大で4096バイトです。
22
22
 
23
23
  ```C
24
24
  /* limits.h */