Os limites de tamanho aplicam-se apenas ao alocar buffers estáticos. gethostbyname(3)
, que analisa as entradas em /etc/hosts
, não aloca buffers estáticos - e nunca tem. O lançamento original do BSD 4.3 de 1983 O algoritmo mostra um arquivo aberto, enquanto a linha de análise é um padrão de arquivo fechado:
sethostent(0);
while (p = gethostent()) {
if (strcmp(p->h_name, name) == 0)
break;
for (cp = p->h_aliases; *cp != 0; cp++)
if (strcmp(*cp, name) == 0)
goto found;
}
found:
endhostent();
As implementações modernas mantêm essa herança em todos os aspectos essenciais.
De qualquer forma, internamente, a família de funções *hostent
armazena um ponteiro de arquivo para a linha atual no arquivo. sethostent
abre o arquivo e define a posição do ponteiro do arquivo. gethostent
obtém dados e avança o ponteiro. endhostent
fecha o ponteiro do arquivo. A Biblioteca GNU C oferece uma referência completa sobre essas funções.
Como você pode imaginar na implementação, as entradas ocorridas anteriormente no arquivo são resolvidas mais rapidamente. Se o seu arquivo hosts é enorme, isso entra em jogo.
Portanto, não importa o tamanho do arquivo, o sistema operacional o consumirá. Eventualmente, no entanto, você atingirá os limites do sistema de arquivos (por resposta de Jeff Schaller ). Você também tem limites máximos de tamanho de linha (por resposta de Kusalananda ). Mas, no final, você pode fazer o tamanho que quiser. Mas por favor, não faça isso.