resposta é: limite é geralmente 255 caracteres (para aqueles que estão com preguiça de clicar neste link)
DOC_ID
11
Sua resposta deve conter pelo menos um resumo das informações relevantes no link fornecido. Não é apenas um link.
Zrajm 15/09/2013
2
@rahmanisback que é certo para os limites de nomes de arquivos, enquanto os limites de caminho são geralmente definidas pelo sistema operacional, não FS (com exceção de alguns FSEs estranhos como iso ou NTFS), e, em Linux, são 4K
nonchip
2
Na verdade, era sobre os dois: D
nonchip
7
Apenas apontando: bytes! = Chars, especialmente se você usar UTF-8. Veja aqui .
Kris
87
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:
Desculpe, mas sou novo aqui e não posso nem comentar, salvar voto. A resposta anterior (por sfp) deve ser aumentada, pois responde completamente à pergunta, enquanto as outras estão parcialmente desligadas. Mais uma vez, desculpe por ir além das regras, mas não posso ficar quieto quando a melhor resposta está na parte inferior.
David Balažic
1
Apenas apontando: bytes! = Chars, especialmente se você usar UTF-8. Veja aqui .
Kris
1
@ DavidBalažic: Embora seja verdade, PATH_MAX no Linux é apenas uma diretriz, a maioria dos sistemas de arquivos subjacentes não tem uma limitação. Isso dificulta a referência a caminhos maiores que esse tamanho. Eu costumo usar "pedaços" de PATH_MAX como tamanho.
Rahly 30/05
23
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:
A maioria dos programas é limitada com caminhos absolutos para 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.
Mikko Rantalainen
Isso ocorre porque várias APIs POSIX como getcwde 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 )
ssokolow 13/03
6
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:
Portanto, como os sistemas de arquivos extX têm um limite de nome de arquivo menor do que o definido no kernel, você nunca alcançaria esse limite, a menos que ele também contenha nomes de caminho, certo?
1819 Ivan Ivan
1
é assim que me parece. Há também PATH_MAX para o caminho, que é 4096, por isso seria atingido antes do tamanho do caminho "ilimitado" nos exts ... Não tenho certeza de como o sistema operacional resolve suas próprias restrições internas e as do FS, nunca tiveram meus braços naquele fundo. pergunta interessante embora.
jj33
4096 caracteres é um nome de caminho infernal. Tenho certeza de que poderia ser levantada com uma recompilação, mas honestamente, / por que você precisa caminhos tanto tempo /?
Avery Payne
Não sei se você precisaria ou não. Eu o vejo mais como uma proteção contra programas maliciosos ou negligentes (eu podia ver facilmente um script que se comporta mal e começa a criar o mesmo diretório recursivamente. Na verdade, eu criei esse script, mas ele estava redirecionando um site, não criando diretórios ...)
Jj33 19/05/09
@AveryPayne Para adicionar tags aos arquivos para que eles possam ser pesquisados usando um simples locate.
Hubert Kario
3
Não há como determinar o tamanho máximo dos caminhos no Linux de maneira portátil. No meu sistema:
Mas posso criar facilmente caminhos com muito mais de 4096 caracteres. Em vez disso, veja PATH_MAXcomo um limite inferior. É garantido que você poderá criar caminhos por tanto tempo, mas também poderá criar caminhos muito mais longos.
Uma maneira simples e portátil de encontrar o tamanho máximo empiricamente é escrever um programa que crie cadeias de diretórios cada vez mais longas e ver onde ele falha. Você não saberá exatamente por que ela falhará (embora espere uma mensagem de erro legível por humanos), mas saberá até onde pode ir com segurança. Lembre-se de verificar o comprimento do diretório individual, o comprimento relativo do nome do caminho e o comprimento absoluto do nome do caminho.
Tripleee
Além disso, por exemplo, o os.pathconf()módulo Python terá algumas respostas; se a porta Python for boa, elas devem ser razoáveis.
tripleee
2
Você não pode, porque alguns sistemas de arquivos não impõem limites . Ele falharia mais cedo com um erro de falta de memória do qual qualquer programa teria dificuldade em se recuperar.
Björn Lindqvist
Esta é a resposta correta, exceto que isso se deve ao comentário do @ BjörnLindqvist. PATH_MAX é apenas uma diretriz e 99% dos arquivos provavelmente estarão dentro desse limite.
Rahly
1
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:
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:
fonte
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:
e C-lang define:
e um pouco mais
fonte
Refiro-me a outras respostas, por favor, vote-as novamente.
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:fonte
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.
fonte
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
erealpath
(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) dependemPATH_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:
fonte
locate
.Não há como determinar o tamanho máximo dos caminhos no Linux de maneira portátil. No meu sistema:
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.fonte
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:
fonte
É especificado no arquivo de cabeçalho limits.h do sistema .
Aqui está um desses arquivos:
Aqui é onde as cópias deste arquivo estão localizadas e os valores que eles definem:
Resultado:
fonte