Відповіді:
Дивіться сторінку Вікіпедії про порівняння файлових систем , особливо у стовпці Максимальна довжина імені файлу .
Ось деякі обмеження довжини назви файлів у популярних файлових системах:
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
Я читав тут, що обмеження довжини шляху є в заголовках системи. Обмеження довжини імені файлу також є. У моїй системі це файл:
/usr/src/linux-headers-2.6.38-10/include/linux/limits.h
а C-lang визначає:
#define NAME_MAX 255 /* # chars in a file name */
#define PATH_MAX 4096 /* # chars in a path name including nul */
і ще деякі.
Я посилаюся на інші відповіді, будь ласка, підкажіть їх.
Чи є якісь імена файлів або довжина шляху в Linux?
Так, довжина імені файлу та шляху обмежена:
linux/limits.h
як зазначено в sfp .Щоб динамічно отримати ці властивості:
pathconf
та,fpathconf
як це запропонував Майкл Аарон СафянВикористовуйте команду getconf
, запропонований тім , який також доступний на Linux:
$ getconf NAME_MAX /mnt/sda2/
255
$ getconf PATH_MAX /mnt/sda3/
4096
А заради економії часу (і прив’язки його до пам’яті):
ext2, ext3, ext4, zfs: немає меж імені шляху; Обмеження назви файлу - 255 байт
PATH_MAX = 4096
Однак більшість програм обмежені абсолютними шляхами до цього . Це можна вирішити, якщо ваша програма може використовувати відносні шляхи, і ви спочатку зміните свій робочий каталог.
Це довжини імен файлової системи. Сам "linux" теж має деякі. Наприклад, з біт / stdio_lim.h:
# define FILENAME_MAX 4096
locate
.
Немає можливості визначити максимальну довжину шляхів на Linux портативним способом. У моїй системі:
$ getconf PATH_MAX /
4096
$ getconf _POSIX_PATH_MAX /
4096
Але я можу легко створювати шляхи набагато довше 4096 символів. Замість цього розгляньте PATH_MAX
як нижню межу. Ви гарантовано зможете створити шляхи так довго, але ви також зможете створити набагато довші.
os.pathconf()
модуль Python матиме відповіді; якщо порт Python корисний, вони повинні бути розумними.
Ви завжди повинні використовувати pathconf або якусь подібну функцію, щоб отримати значення часу виконання зазначених елементів, оскільки на цій сторінці сказано, що:
Слід зазначити, однак, що багато з перелічених обмежень не є інваріантними, і під час виконання значення ліміту може відрізнятися від зазначеного в цьому заголовку з наступних причин:
Ліміт залежить від імені шляху.
Ліміт відрізняється між машинами компіляції та машинами виконання.
З цієї причини програма може використовувати функції fpathconf (), pathconf () та sysconf () для визначення фактичного значення ліміту під час виконання.
Він вказаний у файлі заголовка system.h .
Ось один із цих файлів:
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 */
...
Ось де знаходяться копії цього файлу та значення, які вони визначають:
find /usr | grep limits.h | xargs -I {} grep -H 'NAME_MAX' {}
Вихід:
...
/usr/include/linux/limits.h:#define NAME_MAX 255 /* # chars in a file name */
...