PDA

View Full Version : Funzione dos in c per restituire path dove si trova eseguibile


pmhwp
24-06-2007, 08:11
Salve esiste una funzione in c o dos richiamabile in c che restituisca il path di dove si trova il file?

Grazie.
Ciao.

cionci
24-06-2007, 09:50
Dipende da quale compilatore usi...

repne scasb
24-06-2007, 10:05
#include <stdio.h>

void main(argc,argv)
int argc;
char *argv[];

{
int i=0,j;

do
{
if(*(argv[0]+i)=='\\')
j=i;
} while (*(argv[0]+i++)!=0x00);

*(argv[0]+j)=0x00;

printf("Il path dell'eseguibile e': %s",argv[0]);
}

cionci
24-06-2007, 10:18
Purtroppo quello rende il path relativo...se ho l'eseguibile pippo.exe che si trova in c:\pluto\ e faccio:

x:\> c:
c:\> cd pluto
c:\pluto> pippo <-eseguo pippo

L'output del programma sopra sarà solo pippo...

repne scasb
24-06-2007, 15:31
Purtroppo quello rende il path relativo...se ho l'eseguibile pippo.exe che si trova in c:\pluto\ e faccio:

x:\> c:
c:\> cd pluto
c:\pluto> pippo <-eseguo pippo

L'output del programma sopra sarà solo pippo...

Col cavolo. Questo e' l'output che produce:



C:\>CD PLUTO

C:\PLUTO>PIPPO.EXE
Il path dell'eseguibile e': C:\PLUTO
C:\PLUTO>

cionci
24-06-2007, 15:47
Mah...io ho fatto una prova con mingw32 e mi restituisce solo pippo.exe...
Mi pare che lo stesso giochetto lo facesse in DOS vero con i compilatori della Borland...

cionci
24-06-2007, 15:55
http://img183.imageshack.us/img183/2751/schermata9wz8.jpg

repne scasb
24-06-2007, 15:57
Mah...io ho fatto una prova con mingw32 e mi restituisce solo pippo.exe...
Mi pare che lo stesso giochetto lo facesse in DOS vero con i compilatori della Borland...

Allego eseguibili prodotti da Borland C++ 3.1 (TEST1.COM - DOS16) e da OpenWatcom 1.6 (TEST2.EXE - WIN32), entrambi funzionanti.

repne scasb
24-06-2007, 15:57
http://img183.imageshack.us/img183/2751/schermata9wz8.jpg

Devi munirti di un compilatore funzionante.

cionci
24-06-2007, 16:14
Ha lo stesso comportamento del gcc di Linux...
Mi viene da pensare che non ci sia un comportamento ben definito dallo standard...

cionci
24-06-2007, 16:19
Comunque la mia prima risposta resta valida...
Dipende da quale compilatore usi...

repne scasb
24-06-2007, 16:31
Comunque la mia prima risposta resta valida...

Che il sappia lo standard non definisce accuratamente il contenuto di argv[0], ad ogni modo l'autore della discussione cercava: "Funzione dos in c per restituire path dove si trova eseguibile". Ha specificato "DOS" e non Windows o Linux. Per DOS, che io sappia, argv[0] restituisce il path completo dell'eseguibile; e' comunque possibile che esista un compilatore C per DOS che non rispetti tale consuetudine, ma io non ne ho mai visti. Se comunque conosci un compilatore DOS con tale caratteristica mi piacerebbe dargli un'occhiata, percui ti sarei grata se me ne indicassi il nome. Grazie.

cionci
24-06-2007, 16:49
Io ti sto dicendo che quel comportamento non mi è nuovo...e mi sembra appunto di averlo incontrato ai tempi in cui lavoravo in DOS. Sinceramente non mi ricordo con quale compilatore.

repne scasb
24-06-2007, 16:58
Non e' che ci siano tutti questi compilatori C per DOS, sia Borland che Watcom che Microsoft hanno sempre restituito il path completo con argv[0] (persino il Lattice C restituisce il path completo con argv[0]). Probabilmente lavoravi con qualche "astruso" compilatore C per DOS, sarebbe interessante se te ne ricordassi il nome.

andbin
24-06-2007, 20:00
Da quello che ho sempre notato, sia su Windows che su Linux, ciò che si ha in argv[0] è il path esattamente uguale a quello usato per lanciare l'applicazione.

Se lancio un pippo.exe con:

C:\prova\pippo.exe, avrò il path completo assoluto

..\pippo.exe, avrò ..\pippo.exe

e così via.

È chiaro che se si vuole avere il path assoluto dell'eseguibile si può: 1) Usare funzioni specifiche, es. GetModuleFileName() su Windows oppure 2) Determinare la directory corrente e ottenere il path assoluto "risolvendo" il path relativo combinato con la directory corrente.