GNU/Linux >> Tutoriels Linux >  >> Linux

Comment les programmes Unix idiomatiques détectent-ils le préfixe sous lequel ils sont installés ?

Si j'installe un binaire avec un préfixe non standard, par ex. /opt/bin/foo , qui nécessite des fichiers statiques de /opt/share/foo , comment les trouve-t-il ? Utilisation de références arrière relatives à l'exécutable (../share/foo ) ? Codé en dur au moment de la compilation ?

Quel est l'idiome moyen pour une application de gérer le préfixe d'installation variable ? Tous les répertoires doivent-ils être préfixés ? (qu'en est-il de /var ?)

Réponse acceptée :

Il est courant de coder en dur de telles références au moment de la compilation, et peut-être de fournir une option de ligne de commande ou une variable d'environnement pour remplacer la valeur par défaut au moment de la compilation. Souvent, le programme se souvient juste de l'emplacement d'un fichier de configuration (généralement sous /etc ) où toutes les valeurs par défaut au moment de la compilation peuvent être remplacées. Cette approche est plus logique pour les logiciels open source qui sont compilés par les mêmes personnes qui créent le système d'exploitation, dans le cadre d'une distribution Linux ou de ports BSD.

Pour les applications distribuées sous forme binaire, l'approche habituelle consiste à localiser le binaire de l'application à partir de son argument zéro. Par convention, le zéroième argument de execve (c'est-à-dire argv[0] ) est le chemin vers le binaire (c'est à l'appelant, souvent un shell, de respecter la convention). Si argv[0] ne contient aucun / , l'application doit exécuter $PATH recherchez-le.


Linux
  1. Quels sont vos moments Unix *douloureux* préférés ?

  2. Que sont les modes Vim ? Comment les changer ?

  3. Que sont les liens symboliques (Soft Links) et comment les créer sous Linux

  4. Que sont les scripts shell ? Comment créer des scripts shell ?

  5. Quels sont les types de serveurs DNS

Comment trouver les périphériques connectés au réseau sous Linux

Comment savoir si un package est installé ou non sous Linux et Unix

Comment trouver quelles adresses IP sont connectées à Linux

Comment éditer un fichier binaire sur les systèmes Unix

Quelles sont les significations des préfixes d'interface dans ifconfig ?

Comment puis-je savoir quels processus provoquent des charges élevées s'ils ne sont pas à forte utilisation du processeur ?