2009-04-10 8 views
2

Est-il possible d'obtenir le chemin aboli du lien vers lequel il pointe? Y a-t-il une commande système simple?Obtenir le chemin du lien vers lequel il pointe?

J'ai besoin pour tous les systèmes d'exploitation suivants HP-UX 11i, 1123u, 1123i AIX 5.2 et 5.3 Suse Linux 10 Solaris 10

Répondre

5

Vous n'avez pas spécifié de langue, donc je suppose que vous voulez une commande qui peut être exécutée dans n'importe quel shell que vous utilisez. La commande ls a l'option -l (c'est-à-dire une ell) qui imprime beaucoup d'informations sur le fichier. Le dernier bit d'information est le chemin complet, vous devriez donc pouvoir dire

ls -l file | awk '{print $NF}' 

sur toute machine compatible SUS2 (qui devrait être tous les Unixes commerciaux). Cela posera un problème si le fichier ou l'un des répertoires précédant le fichier contient des espaces.

2

Si vous êtes à la recherche d'un appel système, vous voulez readlink(2). Ceci est standardisé, et devrait donc être disponible sur tous les systèmes compatibles POSIX.

Voici un exemple de son utilisation, pris du lien donné plus tôt:

#include <unistd.h> 

char buf[1024]; 
ssizet_t len; 

if ((len = readlink("/modules/pass1", buf, sizeof(buf)-1)) != -1) 
    buf[len] = '\0'; 

Si vous êtes à la recherche d'une ligne de commande utilitaire, il ne ressemble pas à il y a un standard, mais GNU (Linux) et BSD ont tous les deux readlink(1).

+0

comment triste n'est pas nivelé à travers. – kadeshpa

Questions connexes