OVH Cloud OVH Cloud

Récupérer le PATH de mon application

13 réponses
Avatar
Toto
Bonjour,

je cherche à pouvoir récupérer le PATH complet de mon application en
utilisant les librairies standard du C++.

En gros, si je suis dans /home/user et que je lance ./dossier/monAppli,
j'aimerais récupérer /home/user/dossier/monAppli

Si vous aviez une idée... :-)

Bien cordialement,

Valentin

10 réponses

1 2
Avatar
Fabien LE LEZ
On Wed, 26 May 2004 14:00:15 +0200, Toto wrote:

En gros, si je suis dans /home/user et que je lance ./dossier/monAppli,
j'aimerais récupérer /home/user/dossier/monAppli


Parser argv[0] ne suffit pas ?

--
;-)
FLL, Epagneul Breton

Avatar
Toto
Fabien LE LEZ wrote:
On Wed, 26 May 2004 14:00:15 +0200, Toto wrote:


En gros, si je suis dans /home/user et que je lance ./dossier/monAppli,
j'aimerais récupérer /home/user/dossier/monAppli



Parser argv[0] ne suffit pas ?



Non cela ne me donne que ./dosser/monAppli

:-/


Avatar
Franck Guillaud
Toto wrote:

Fabien LE LEZ wrote:

On Wed, 26 May 2004 14:00:15 +0200, Toto wrote:


En gros, si je suis dans /home/user et que je lance
./dossier/monAppli, j'aimerais récupérer /home/user/dossier/monAppli




Parser argv[0] ne suffit pas ?



Non cela ne me donne que ./dosser/monAppli



Et si jamais tu as un racourci de /toto/titi/tata vers
/home/user/dossier/monAppli, Tu veux récupérer quoi comme chemin :
- /toto/titi/tata
ou
- /home/user/dossier/monAppli ?

Cette simple question pour dire que sous unix et affiliés, la notion de
chemin d'un exécutable n'a pas bcp sens.

En plus, c'est HS :-)

Franck,e-



Avatar
Toto
Franck Guillaud wrote:
Toto wrote:

Fabien LE LEZ wrote:

On Wed, 26 May 2004 14:00:15 +0200, Toto wrote:


En gros, si je suis dans /home/user et que je lance
./dossier/monAppli, j'aimerais récupérer /home/user/dossier/monAppli





Parser argv[0] ne suffit pas ?



Non cela ne me donne que ./dosser/monAppli



Et si jamais tu as un racourci de /toto/titi/tata vers
/home/user/dossier/monAppli, Tu veux récupérer quoi comme chemin :
- /toto/titi/tata
ou
- /home/user/dossier/monAppli ?

Cette simple question pour dire que sous unix et affiliés, la notion de
chemin d'un exécutable n'a pas bcp sens.

En plus, c'est HS :-)

Franck,e-


Plutot le 2ème cas mais bon ca serait pas dérangeant :-)

C'est po hors sujet j'aimerais le faire en C++ :-D

Valentin




Avatar
Jean-Marc Bourguet
Toto writes:

Plutot le 2ème cas mais bon ca serait pas dérangeant :-)

C'est po hors sujet j'aimerais le faire en C++ :-D


Il n'y a pas moyen de le faire en C++ standard.

Le faire est possible sur certaine plateforme, dans le cas de Unix je
te conseille de reposer ta question sur

fr.comp.os.unix

(ou on va te dire "faut pas faire ca")

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Avatar
drkm
Toto writes:

En gros, si je suis dans /home/user et que je lance
./dossier/monAppli, j'aimerais récupérer /home/user/dossier/monAppli

Si vous aviez une idée... :-)


La « Boost Filesystem Library » ? C'est beaucoup plus large que la
simple récupération du répertoire courant, mais elle peut t'intéresser
si tu fait d'autres manipulations en rapport avec le FS. Tu la
trouveras à <URL:http://www.boost.org/libs/filesystem/doc/index.htm>.

Mais s'il s'agit juste de récupérer le nom du répertoire courant,
dans un programme destiné à une seule plate-forme, un appel à l'API de
ton OS sera plus simple, si tu l'encapsules comme il faut.

--drkm

Avatar
Toto
drkm wrote:
Toto writes:


En gros, si je suis dans /home/user et que je lance
./dossier/monAppli, j'aimerais récupérer /home/user/dossier/monAppli



Si vous aviez une idée... :-)



La « Boost Filesystem Library » ? C'est beaucoup plus large que la
simple récupération du répertoire courant, mais elle peut t'intéresser
si tu fait d'autres manipulations en rapport avec le FS. Tu la
trouveras à <URL:http://www.boost.org/libs/filesystem/doc/index.htm>.

Mais s'il s'agit juste de récupérer le nom du répertoire courant,
dans un programme destiné à une seule plate-forme, un appel à l'API de
ton OS sera plus simple, si tu l'encapsules comme il faut.

--drkm


je vais voir merci :-)

Le programme n'est pas destiné à qu'une seule plateforme malheureusement
:-/

Valentin


Avatar
Fabien LE LEZ
On Wed, 26 May 2004 15:37:23 +0200, Toto wrote:

Le programme n'est pas destiné à qu'une seule plateforme malheureusement
:-/


Dans ce cas, généralement on regroupe les wrappers vers les fonctions
spécifiques à l'OS dans un module, et une version de ce module par OS.

--
;-)
FLL, Epagneul Breton

Avatar
kanze
Franck Guillaud wrote in message
news:<40b48cd1$0$3691$...
Toto wrote:

Fabien LE LEZ wrote:

On Wed, 26 May 2004 14:00:15 +0200, Toto wrote:

En gros, si je suis dans /home/user et que je lance
./dossier/monAppli, j'aimerais récupérer /home/user/dossier/monAppli


Parser argv[0] ne suffit pas ?


Non cela ne me donne que ./dosser/monAppli


Et si jamais tu as un racourci de /toto/titi/tata vers
/home/user/dossier/monAppli, Tu veux récupérer quoi comme chemin :
- /toto/titi/tata
ou
- /home/user/dossier/monAppli ?

Cette simple question pour dire que sous unix et affiliés, la notion
de chemin d'un exécutable n'a pas bcp sens.


Le SE a toujours suivi un chemin précis pour trouver le programme. On
pourrait dire que c'est le chemin. La plupart du temps, quand on veut le
chemin, c'est pour trouver d'autres fichiers qui sont censés se trouver
dans le même répertoire. Dans ce cas-là, évidemment, les deux chemins se
valent.

En plus, c'est HS :-)


Pas du tout. Il a posé bien une question C++.

Malheureusement, la réponse est : ce n'est pas possible.

Qu'il démande précisement pour Unix ou pour Windows, on pourrait dire
que la question était HS. (Malheureusement pour lui, autant que je
sache, la réponse dans les deux cas reste la même. Il y a peut-être une
requête Windows particulière que je ne connais pas, mais je sais que
sous Unix, ce n'est pas possible. Au moins, pas dans le cas général ;
selon le shell qui l'a invoqué, on pourrait dans certains cas y
parvenir.)

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34




Avatar
kanze
Fabien LE LEZ wrote in message
news:...
On Wed, 26 May 2004 14:00:15 +0200, Toto wrote:

En gros, si je suis dans /home/user et que je lance
./dossier/monAppli, j'aimerais récupérer /home/user/dossier/monAppli


Parser argv[0] ne suffit pas ?


Selon la norme, argv[0] doit contenir le nom du programme, non le chemin
de l'executable. Comment le système trouve l'executable à partir du nom
dépend du système -- sous Unix, par exemple, tu pourrais essayer de lire
$PATH, puis émuler ce que fait le système.

Dans la pratique, argv[0] est à peu près n'importe quoi. Sous Unix, par
exemple, c'est ce que le programme qui t'invoque décide à te passer --
si c'est un shell classique, ça serait soit le nom, soit le chemin,
selon le shell, mais si ce n'est pas un shell, ça peut être à peu près
n'importe quoi.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34


1 2