C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Récupérer le PATH de mon application

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Toto
Guest





PostPosted: Wed May 26, 2004 12:00 pm    Post subject: Récupérer le PATH de mon application Reply with quote



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
Back to top
Fabien LE LEZ
Guest





PostPosted: Wed May 26, 2004 12:08 pm    Post subject: Re: Récupérer le PATH de mon application Reply with quote



On Wed, 26 May 2004 14:00:15 +0200, Toto <toto (AT) toto (DOT) com> wrote:

Quote:
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 ?

--
Wink
FLL, Epagneul Breton

Back to top
Toto
Guest





PostPosted: Wed May 26, 2004 12:21 pm    Post subject: Re: Récupérer le PATH de mon application Reply with quote



Fabien LE LEZ wrote:
Quote:
On Wed, 26 May 2004 14:00:15 +0200, Toto <toto (AT) toto (DOT) com> 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

:-/

Back to top
Franck Guillaud
Guest





PostPosted: Wed May 26, 2004 12:25 pm    Post subject: Re: Récupérer le PATH de mon application Reply with quote

Toto wrote:

Quote:
Fabien LE LEZ wrote:

On Wed, 26 May 2004 14:00:15 +0200, Toto <toto (AT) toto (DOT) com> 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-

Back to top
Toto
Guest





PostPosted: Wed May 26, 2004 12:36 pm    Post subject: Re: Récupérer le PATH de mon application Reply with quote

Franck Guillaud wrote:
Quote:
Toto wrote:

Fabien LE LEZ wrote:

On Wed, 26 May 2004 14:00:15 +0200, Toto <toto (AT) toto (DOT) com> 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

Back to top
Jean-Marc Bourguet
Guest





PostPosted: Wed May 26, 2004 12:50 pm    Post subject: Re: Récupérer le PATH de mon application Reply with quote

Toto <toto (AT) toto (DOT) com> writes:

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

C'est po hors sujet j'aimerais le faire en C++ Very Happy

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

Back to top
drkm
Guest





PostPosted: Wed May 26, 2004 1:30 pm    Post subject: Re: Récupérer le PATH de mon application Reply with quote

Toto <toto (AT) toto (DOT) com> writes:

Quote:
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... Smile

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

Back to top
Toto
Guest





PostPosted: Wed May 26, 2004 1:37 pm    Post subject: Re: Récupérer le PATH de mon application Reply with quote

drkm wrote:
Quote:
Toto <toto (AT) toto (DOT) com> 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

Back to top
Fabien LE LEZ
Guest





PostPosted: Wed May 26, 2004 5:07 pm    Post subject: Re: Récupérer le PATH de mon application Reply with quote

On Wed, 26 May 2004 15:37:23 +0200, Toto <toto (AT) toto (DOT) com> wrote:

Quote:
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.

--
Wink
FLL, Epagneul Breton

Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Thu May 27, 2004 7:50 am    Post subject: Re: Récupérer le PATH de mon applic ation Reply with quote

Franck Guillaud <f_point_guillaud (AT) free (DOT) fr> wrote

Quote:
Toto wrote:

Fabien LE LEZ wrote:

On Wed, 26 May 2004 14:00:15 +0200, Toto <toto (AT) toto (DOT) com> 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.

Quote:
En plus, c'est HS Smile

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

Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Thu May 27, 2004 8:20 am    Post subject: Re: Récupérer le PATH de mon application Reply with quote

Fabien LE LEZ <gramster (AT) gramster (DOT) com> wrote

Quote:
On Wed, 26 May 2004 14:00:15 +0200, Toto <toto (AT) toto (DOT) com> 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

Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Thu May 27, 2004 8:24 am    Post subject: Re: Récupérer le PATH de mon application Reply with quote

Fabien LE LEZ <gramster (AT) gramster (DOT) com> wrote

Quote:
On Wed, 26 May 2004 14:00:15 +0200, Toto <toto (AT) toto (DOT) com> 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

Back to top
Loïc Joly
Guest





PostPosted: Thu May 27, 2004 11:19 pm    Post subject: Re: Récupérer le PATH de mon application Reply with quote

[email]kanze (AT) gabi-soft (DOT) fr[/email] wrote:


Quote:

Selon la norme, argv[0] doit contenir le nom du programme, non le chemin
de l'executable.

Je préciserai en tant que nom du programme : Il s'agit du nom utilisé
pour invoquer le programme, et non pas d'un nom venu d'ailleur. Quand on
lance gcc, il n'y a pas dans argv[0] la chaine "The GNU Compiler
Collection". En plus, il est tout à fait légal d'avoir un argv[0] vide
(voire même pas de argv[0]) :

If argc is nonzero these arguments shall be supplied in argv[0] through
argv[argc1] as pointers to the initial characters of nullterminated
multibyte strings (NTMBSs) (17.3.2.1.3.2) and argv[0] shall be the
pointer to the initial character of a NTMBS that represents the
name used to invoke the program or ""

--
Loïc

Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Fri May 28, 2004 10:56 am    Post subject: Re: Récupérer le PATH de mon applic ation Reply with quote

Loïc Joly <loic.actarus.joly (AT) wanadoo (DOT) fr> wrote

Quote:
kanze (AT) gabi-soft (DOT) fr wrote:

Selon la norme, argv[0] doit contenir le nom du programme, non le
chemin de l'executable.

Je préciserai en tant que nom du programme : Il s'agit du nom utilisé
pour invoquer le programme, et non pas d'un nom venu d'ailleur.

Seulement en C++, non en C. Et ça veut dire quoi, « invoquer un
programme » ? Sous Unix, seulement un programme peut invoquer un autre
programme, et il n'utilise pas de nom pour ça, mais le chemin de
l'exécutable. Un utilisateur passe des commandes à un « shell », qui les
interprète selon ses propres conventions ; la plupart du temps, le shell
finit par invoquer un programme (c'est la définition d'un shell, je
crois), mais pas toujours, et quand il invoque un programme, le chemin
qu'il passe au système n'a pas nécessairement grand chose à voir avec le
nom que l'utilisateur a donné. (Pense aux alias, par exemple.)

Par convention, sous Unix, les shells passe le premier mot de la
commande, *après* expansion des variables de shell, des alias, etc.,
comme argv[0]. Et le deuxième mot comme argv[1], le troisième comme
argv[2], etc. ; en fait, ils traitent tous les mots pareil.

Mais ce n'est qu'une convention, et ça ne vaut que pour les shells.
Selon la norme C++, qu'est-ce qu'il faut comme argv[0] si j'invoque le
programme en cliquant sur un bouton ? (C'est quand même le cas le plus
courant sur beaucoup de systèmes.)

Quote:
Quand on lance gcc, il n'y a pas dans argv[0] la chaine "The GNU
Compiler Collection".

Ça dépend. Si j'exécute :
execl( "/usr/local/bin/gcc",
"The GNU Compiler Collection",
(char const*)NULL ) ;
dans un programme, par exemple.

Et si tu invoque « xtern -ls », quel est le nom de programme de ton
shell ? (Essaie « echo $0 » pour savoir.)

Quote:
En plus, il est tout à fait légal d'avoir un argv[0] vide (voire même
pas de argv[0]) :

Selon la norme C++, c'est la seule implémentation légale. Mais
évidemment, comme nous savons tous, il n'y a pas de compilateur
conforme. Dans ce cas-ci, heureusement.

Quote:
If argc is nonzero these arguments shall be supplied in argv[0]
through argv[argc1] as pointers to the initial characters of
nullterminated multibyte strings (NTMBSs) (17.3.2.1.3.2) and argv[0]
shall be the pointer to the initial character of a NTMBS that
represents the name used to invoke the program or ""

Ce qui n'est pas ce qu'il dit dans la norme C. Encore une
incompatibilité gratuite. Et une qui dans la pratique rend
l'implémentation de C++ impossible sous Unix. Je doute que c'en était
l'intention. De la norme C99 :

-- If the value of argc is greater than zero, the array members
argv[0] through argv[argc-1] inclusive shall contain pointers to
strings, which are given implementation-defined values by the
host environment prior to program startup. The intent is to
supply to the program information determined prior to program
startup from elsewhere in the hosted envirionment. [...]

-- If the avlue of argc is greater than zero, the string pointed to
by argv[0] represents the program name; argv[0][0] shall
be the null character if the program name is not available from
the host environment. If the value of argc is greater than one,
the strings pointed to by argv[1] through argv[argc-1] represent
the program parameters.

Note bien l'utilisation des italiques dans le deuxième point ; ça
signifie qu'il s'agit d'une définition de l'expression. En C, donc, le
nom du programme, c'est défini comme « la chaîne passée comme argv[0] ».
Et le premier point rend clair que le contenu réel de cette chaîne,
c'est définie par l'implémentation.

Je ne sais pas ce que disait C90 ici. (Je pourrais le vérifier ce soir,
si j'y pense ; j'ai une copie de la norme C90 chez moi.) Mais une chose
est certaine, ce que dit C99 est bien plus raisonable que ce que dit
C++.

--
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

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.