Réponses:
Voir la page Wikipedia sur la comparaison des systèmes de fichiers , en particulier dans la colonne Longueur maximale du nom de fichier .
Voici quelques limites de longueur de nom de fichier dans les systèmes de fichiers courants:
BTRFS 255 bytes
exFAT 255 UTF-16 characters
ext2 255 bytes
ext3 255 bytes
ext3cow 255 bytes
ext4 255 bytes
FAT32 8.3 (255 UCS-2 code units with VFAT LFNs)
NTFS 255 characters
XFS 255 bytes
J'ai lu ici que la limite de longueur de chemin se trouve dans les en-têtes du système. La longueur maximale du nom de fichier est également présente. Sur mon système, c'est le fichier:
/usr/src/linux-headers-2.6.38-10/include/linux/limits.h
et C-lang définit:
#define NAME_MAX 255 /* # chars in a file name */
#define PATH_MAX 4096 /* # chars in a path name including nul */
et quelques autres.
Je me réfère à d'autres réponses, s'il vous plaît les inviter à voter.
Existe-t-il des limites de longueur de nom de fichier ou de chemin sous Linux?
Oui, les longueurs de nom de fichier et de chemin sont limitées par:
linux/limits.h
comme indiqué par sfp .Pour obtenir dynamiquement ces propriétés:
pathconf
etfpathconf
comme proposé par Michael Aaron SafyanUtilisez la commande getconf
proposée par tim , également disponible sous Linux:
$ getconf NAME_MAX /mnt/sda2/
255
$ getconf PATH_MAX /mnt/sda3/
4096
Et pour gagner du temps (et le garder en mémoire):
ext2, ext3, ext4, zfs: pas de limite de chemin d'accès; Limite de fichier de 255 octets.
PATH_MAX = 4096
. Cela peut être contourné si votre programme est capable d'utiliser des chemins relatifs et que vous modifiez d'abord votre répertoire de travail.
getcwd
et realpath
(que vous pouvez réimplémenter dans le code de l’espace utilisateur en lisant les métadonnées .
, puis en les changeant ..
et en les répétant jusqu’à ce que vous atteigniez la racine du système de fichiers) dépendent PATH_MAX
. ( Source )
Ce sont des longueurs de noms de système de fichiers. "linux" en a aussi. Par exemple, à partir de bits / stdio_lim.h:
# define FILENAME_MAX 4096
locate
.
Il n’existe aucun moyen de déterminer la longueur maximale des chemins sous Linux de manière portable. Sur mon système:
$ getconf PATH_MAX /
4096
$ getconf _POSIX_PATH_MAX /
4096
Mais je peux facilement créer des chemins beaucoup plus longs que 4096 caractères. Voyez plutôt PATH_MAX
comme une limite inférieure. Vous êtes assuré de pouvoir créer des chemins aussi longs, mais vous pourrez également en créer de plus longs.
os.pathconf()
module Python aura des réponses; si le port Python est bon, ils devraient être raisonnables.
Vous devez toujours utiliser pathconf ou une fonction comme celle-ci pour obtenir la valeur d'exécution des éléments spécifiés, comme le dit cette page :
Il convient toutefois de noter que bon nombre des limites énumérées ne sont pas invariantes et que, lors de l'exécution, la valeur de la limite peut différer de celle indiquée dans cet en-tête, pour les raisons suivantes:
La limite dépend du nom du chemin.
La limite diffère entre les ordinateurs de compilation et d'exécution.
Pour ces raisons, une application peut utiliser les fonctions fpathconf (), pathconf () et sysconf () pour déterminer la valeur réelle d'une limite au moment de l'exécution.
Il est spécifié dans le fichier d'en-tête système limits.h .
Voici l'un de ces fichiers:
cat /usr/include/linux/limits.h
...
#define NAME_MAX 255 /* # chars in a file name */
#define PATH_MAX 4096 /* # chars in a path name including nul */
...
Voici où se trouvent les copies de ce fichier et les valeurs qu’elles définissent:
find /usr | grep limits.h | xargs -I {} grep -H 'NAME_MAX' {}
Sortie:
...
/usr/include/linux/limits.h:#define NAME_MAX 255 /* # chars in a file name */
...