Forum

Z PMD 85 Infoserver

:: späť na začiatok témy :: späť na zoznam tém ::
Správa
Autor  Autor ::  JL
Poslaná  Poslaná ::  25.12.2013 11:49:12
Predmet  Predmet ::  Re: drobná nepříjemnost v utilitce cim
Pokud už budeš u toho, měl bych jedno případné přání.
Pokud není v aktuálním adresáři soubor ini, pak se použije globální.

Nevím jestli to není zase odlišnost od win, ale když mám program někde v cestě a volám jej tam kde je potřeba, hledá se ini v tom aktuálním adresáři místo toho, kde je fyzicky program umístěn.

Zatím jsem si to tam zakódoval na tvrdo.

int ReadConfig(char *ext) {
char buff[1024];
char *p, *q;
FILE *f;
int e, flg, i, j;

if (*ext == 0)
return ERR_IMG_EXT_MISSING;

strcpy(buff, exePath);
strcat(buff, exeName);
strcat(buff, ".ini");
f = fopen(buff, "r");
if (f == NULL) {
f = fopen("/opt/bin/cim.ini", "r");
if (f == NULL)
return ERR_CONF_FILE_MISSING;
}
 
Správa
Autor  Autor ::  Roman Bórik
Poslaná  Poslaná ::  25.12.2013 16:24:00
Predmet  Predmet ::  Re: drobná nepříjemnost v utilitce cim
Som proti tomu, hardkódovať do programu nejakú "absolútnu" cestu.

Teda, pravdupovediac, vôbec netuším, ako je to na Linuxe, keďže ho nepoužívam.

Ja mám vo Win do systémovej premennej PATH pridanú cestu k adresáru s rôznymi utilitami. Tam je aj CIM.exe a aj CIM.ini.
Takže môžem CIM spustiť odkiaľkoľvek bez toho, aby som zadával cestu k utilite. Teda, aktuálny adresár môže byť akýkoľvek.
Po spustení utility je v argv[0] úplná cesta k CIM.exe (aspoň vo Win) a vo funkcii PrepareParams(...) je extrahovaná cesta k CIM.exe do premennej 'exePath', ktorá je potom použitá pre nájdenie CIM.ini.
Ak sú CIM.exe a CIM.ini v jednom adresári, musí byť INI súbor bez problémov nájdený.
 
Správa
Autor  Autor ::  JL
Poslaná  Poslaná ::  25.12.2013 19:30:04
Predmet  Predmet ::  Re: drobná nepříjemnost v utilitce cim
Ano taky jsem proti hardkódování cesty.

Proto jsem taky uvedl že jsem to "zatím zakódoval natvrdo" a to proto, že nevím jak to udělat lépe.

Když mám na linuxu program v adresáři kam ukazuje proměnná PATH, např. /opt/bin/ a spustím jej z jiného adresáře, např /home/ladmanj, tak v argv[0] je bohužel jen cim.
Program potom hledá /home/ladmanj/cim.ini a ten neexistuje.

Nechci se hádat co je správně, tady se to jeví jako pitomost na straně unixu, ale třeba je k tomu jiný rozumný důvod.
Každopádně C vzniklo na unixu, tak v rámci přenositelnosti je spíš chyba, že to nerespektují překladače pro win.

Unixově košer by možná bylo, hledat konfigurák relativně v ../etc/ nebo ../share/, ale opět relativně k umístění programu, a ne pwd odkud se spouští. Nebo v ~/.cim/ což je obvyklý způsob ukládání uživatelských konfigurací.

Každopádně je to asi jeno

Když si udělám bash skript, kterým budu cim spouštět, už si to tam vyřeším a nemusím modifikovat zdroják.
:: späť na začiatok témy :: späť na zoznam tém ::