Je ne comprends pas bien ce que vous demandez. Si je ne savais pas mieux, je pense que vous demandiez s'il y avait un moyen de détecter cela pendant que vous traitez un fichier. Je ne pense pas que ce soit possible.
La seule méthode que je peux concevoir est de faire une recherche où vous commencez spécifiquement à parcourir une branche particulière de l'arborescence des répertoires.
Exemple
$ tree 
.
`-- a
    `-- b
        |-- c
        |   `-- d
        |       `-- e -> ../../../../a/b
        `-- e -> e
5 directories, 1 file
La findcommande détectera cette boucle mais ne vous en dira pas beaucoup à ce sujet.
$ find -L . -mindepth 15
find: File system loop detected; `./a/b/c/d/e' is part of the same file system loop as `./a/b'.
find: `./a/b/e': Too many levels of symbolic links
J'ai arbitrairement choisi 15 niveaux afin de bloquer toute sortie affichée par le find. Vous pouvez cependant supprimer ce commutateur ( -mindepth) si vous ne vous souciez pas de l'arborescence de répertoires affichée. La findcommande détecte toujours la boucle et s'arrête:
$ find -L . 
.
./a
./a/b
./a/b/c
./a/b/c/d
find: File system loop detected; `./a/b/c/d/e' is part of the same file system loop as `./a/b'.
find: `./a/b/e': Too many levels of symbolic links
Soit dit en passant , si vous souhaitez remplacer la valeur par défaut MAXSYMLINKSqui est apparemment 40 sur Linux (les versions 3.x plus récentes du noyau), vous pouvez voir cette Q&R U&L intitulée: Comment augmenter MAXSYMLINKS .
Utilisation de la commande de liens symboliques
Il existe un outil que les responsables du site FTP pourraient utiliser, appelé, symlinksqui aidera à exposer les problèmes liés aux arbres longs ou pendants qui ont été causés par des liens symboliques.
Dans certains cas, l' symlinksoutil peut également être utilisé pour supprimer les liens incriminés.
Exemple
$ symlinks -srv a
lengthy:  /home/saml/tst/99159/a/b/c/d/e -> ../../../../a/b
dangling: /home/saml/tst/99159/a/b/e -> e
La bibliothèque glibc
La bibliothèque glibc cherche à offrir quelques fonctions C autour de cela, mais je ne connais pas entièrement leur rôle ni comment les utiliser réellement. Je ne peux donc que vous les signaler.
La page de manuel man symlinkmontre la définition de la fonction d'une fonction appelée symlink(). La description va comme ceci:
  symlink () crée un lien symbolique nommé newpath qui contient la chaîne oldpath.
L'une des erreurs indique que cette fonction renvoie:
  ELOOP Trop de liens symboliques ont été rencontrés lors de la résolution de newpath.
Je vous dirigerai également vers la page de manuel, man path_resolutionqui explique comment Unix détermine les chemins d'accès aux éléments sur le disque. Plus précisément ce paragraphe.
If  the component is found and is a symbolic link (symlink), we first 
resolve this symbolic link (with the current lookup directory as starting 
lookup directory).  Upon error, that error is returned.  If the result is 
not a directory, an ENOTDIR error is returned.  If the resolution of the 
symlink is successful and returns a directory, we set the current lookup
directory to that directory, and go to the next component.  Note that the 
resolution process here involves recursion.  In order  to  protect  the 
kernel against stack overflow, and also to protect against denial of 
service, there are limits on the maximum recursion depth, and on the maximum 
number of symbolic links followed.  An ELOOP error is returned  when  the
maximum is exceeded ("Too many levels of symbolic links").
               
              
readlink ...sur les situations ci-dessus?