Respostas:
Consulte a página da Wikipedia sobre comparação de sistemas de arquivos , especialmente na coluna Comprimento máximo do nome do arquivo .
Aqui estão alguns limites de tamanho de nome de arquivo em sistemas de arquivos populares:
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
Eu li aqui que o limite de tamanho do caminho está nos cabeçalhos do sistema. O limite de tamanho do nome do arquivo também existe. No meu sistema é arquivo:
/usr/src/linux-headers-2.6.38-10/include/linux/limits.h
e C-lang define:
#define NAME_MAX 255 /* # chars in a file name */
#define PATH_MAX 4096 /* # chars in a path name including nul */
e um pouco mais
Refiro-me a outras respostas, por favor, vote-as novamente.
Há algum nome de arquivo ou limite de tamanho de caminho no Linux?
Sim, os comprimentos do nome do arquivo e do caminho são limitados por:
linux/limits.h
conforme declarado por sfp .Para obter dinamicamente essas propriedades:
pathconf
efpathconf
conforme proposto por Michael Aaron SafyanUse o comando getconf
proposto por tim, que também está disponível no Linux:
$ getconf NAME_MAX /mnt/sda2/
255
$ getconf PATH_MAX /mnt/sda3/
4096
E para economizar tempo (e ancorá-lo na memória):
ext2, ext3, ext4, zfs: sem limites de nome de caminho; Limite de nome de arquivo de 255 bytes.
PATH_MAX = 4096
, no entanto. Isso pode ser contornado se o seu programa puder usar caminhos relativos e você alterar seu diretório de trabalho primeiro.
getcwd
e realpath
(que você pode reimplementar no código do espaço do usuário lendo os metadados .
e depois alterando ..
e repetindo até atingir a raiz do sistema de arquivos) dependem PATH_MAX
. ( Fonte )
Esses são comprimentos de nomes de sistemas de arquivos. O próprio "linux" também tem alguns. Por exemplo, de bits / stdio_lim.h:
# define FILENAME_MAX 4096
locate
.
Não há como determinar o tamanho máximo dos caminhos no Linux de maneira portátil. No meu sistema:
$ getconf PATH_MAX /
4096
$ getconf _POSIX_PATH_MAX /
4096
Mas posso criar facilmente caminhos com muito mais de 4096 caracteres. Em vez disso, veja PATH_MAX
como um limite inferior. É garantido que você poderá criar caminhos por tanto tempo, mas também poderá criar caminhos muito mais longos.
os.pathconf()
módulo Python terá algumas respostas; se a porta Python for boa, elas devem ser razoáveis.
Você sempre deve usar o pathconf ou alguma função como essa para obter o valor do tempo de execução dos itens especificados, pois esta página dizia que:
Deve-se notar, no entanto, que muitos dos limites listados não são invariáveis e, em tempo de execução, o valor do limite pode diferir dos dados neste cabeçalho, pelos seguintes motivos:
O limite depende do nome do caminho.
O limite difere entre as máquinas de compilação e tempo de execução.
Por esses motivos, um aplicativo pode usar as funções fpathconf (), pathconf () e sysconf () para determinar o valor real de um limite em tempo de execução.
É especificado no arquivo de cabeçalho limits.h do sistema .
Aqui está um desses arquivos:
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 */
...
Aqui é onde as cópias deste arquivo estão localizadas e os valores que eles definem:
find /usr | grep limits.h | xargs -I {} grep -H 'NAME_MAX' {}
Resultado:
...
/usr/include/linux/limits.h:#define NAME_MAX 255 /* # chars in a file name */
...