Olhando a página de manual lstat (2) , você pode obter alguma inspiração sobre casos que podem causar falhas com erros diferentes de ENOENT (o arquivo não existe).
O mais óbvio é:
A
permissão de pesquisa do EACCES é negada para um dos diretórios no prefixo do caminho .
Então você precisa de um diretório do qual não possa pesquisar.
Sim, você pode procurar por um que já esteja em seu sistema (talvez /var/lib/private
se ele existir?) Mas é melhor criar um você mesmo, com o equivalente a:
$ mkdir myprivatedir
$ touch myprivatedir/myunreachablefile
$ chmod 0 myprivatedir
$ ls -l myprivatedir/myunreachablefile
A operação lstat (2) falhará com o EACCES aqui. (A remoção de todas as permissões do diretório garante isso. Talvez você nem precise muito disso e a chmod -x
remoção de permissões de execução seria suficiente, pois são necessárias permissões de execução em um diretório para acessar arquivos nele.)
Existe outra maneira criativa de fazer com que o lstat (2) falhe, olhando para a página de manual:
ENOTDIR
Um componente do prefixo do caminho não é um diretório.
Portanto, tentar acessar um arquivo como /etc/passwd/nonexistent
deve acionar esse erro, que novamente é diferente de ENOENT ("Não existe esse arquivo ou diretório") e pode atender às suas necessidades.
Outro é:
O
caminho ENAMETOOLONG é muito longo.
Mas você pode precisar de um nome realmente longo para este (acredito que 4.096 bytes é o limite típico, mas seu sistema / sistema de arquivos pode ter um mais longo.)
Finalmente, é difícil dizer se algum deles será realmente útil para você. Você diz que deseja algo que não aciona o cenário "o arquivo não existe". Embora normalmente isso signifique um erro ENOENT, na prática muitas verificações de nível superior simplesmente interpretam quaisquer erros do lstat (2) como "não existe". Por exemplo, test -e
ou o equivalente [ -e ...]
do shell pode simplesmente interpretar todos os itens acima como "não existe", especialmente porque ele não tem uma boa maneira de retornar uma mensagem de erro diferente e não retornar um erro implicaria a existência do arquivo, o que certamente não é o caso.
/etc/shadow