linux programistiiiiiiiiiiiiiii
8 отговора
210 прегледа
linux programistiiiiiiiiiiiiiii
imam 2 vaprosa:
1. kak moga da razbera palnia pat, ot koito e startiran izpalnim file (argv[0] ne varshi rabota)
2. pri binarno chetene na file, kak moga da razbera dali EOF e EOF ili greshka pri chetene
1. kak moga da razbera palnia pat, ot koito e startiran izpalnim file (argv[0] ne varshi rabota)
2. pri binarno chetene na file, kak moga da razbera dali EOF e EOF ili greshka pri chetene
Отг: linux programistiiiiiiiiiiiiiii
1. Za kakvo tochno ti e tozi put? Izpolzvai relativni putishta ako ti trqbva neshto.
V argv[0] ti e purviq argument na programata!
2. Izpolzvai fstat za da vidish kakuv e razmera na fail-a, sled tova fread.
Tova e za C!
Uspeh
V argv[0] ti e purviq argument na programata!
2. Izpolzvai fstat za da vidish kakuv e razmera na fail-a, sled tova fread.
Tova e za C!
Uspeh
blagodaria za (2.)
1. Palnia pat mi trabva zaradi slednoto: po vreme na rabotata na programata iskam da pisha info vav file v subpath na patia na izpalnimia file. argv[0] sadarja imeto, kakto e izvikano ot shell-a i (tova go proverih :(( ) ako patia e slojen v $PATH ... siibalomamata, zashtoto ako zadam rezultatnia file da e bez pat ili s "./" go pishe v tekushtata, koiato na vsichkoto otgore (po opredelenie) moje da se razlichava v razlichnite OS, a te mnogo stanaha kato broika (mamka im i na tiah).
...
Ta, zatova mi e palnia pat. Ako imash madra idea shte e super (vij P.S. po-dolu)
2. Mnogo mersi za fstat - tochno tova ne mojah da nameria i se zachudih za toia EOF.
P.S. poneje razpolagam samo s man-ovete niama kak da tarsia kak bi mogla da se kazva funkcia, koiato pravi kakvoto mi triabva
...
Ta, zatova mi e palnia pat. Ako imash madra idea shte e super (vij P.S. po-dolu)
2. Mnogo mersi za fstat - tochno tova ne mojah da nameria i se zachudih za toia EOF.
P.S. poneje razpolagam samo s man-ovete niama kak da tarsia kak bi mogla da se kazva funkcia, koiato pravi kakvoto mi triabva
Отг: blagodaria za (2.)
Vizh sega. Ideata da pishesh v dir ot koiato e startirana programata protivorechi na ideologiata v Unix/Linux.
Ne che ne mozhe no ne e prieto :))
Ako programata ti e instalirana v /usr/local/bin primerno logichno e da pishesh (i chetesh danni) v /usr/local/var i da si chetesh konfiguraciite ot /usr/local/etc
Drug i to dosta logichen variant e da si instalirash programata v /usr/local/neshto_si
koeto neshto_si si ima neshto_si/etc neshto_si/var neshto_si/bin
100% si puskal ./configure
E standartno ima enda opcia
--prefix=PREFIX
Tochno tova se ima predvid
Ne che ne mozhe no ne e prieto :))
Ako programata ti e instalirana v /usr/local/bin primerno logichno e da pishesh (i chetesh danni) v /usr/local/var i da si chetesh konfiguraciite ot /usr/local/etc
Drug i to dosta logichen variant e da si instalirash programata v /usr/local/neshto_si
koeto neshto_si si ima neshto_si/etc neshto_si/var neshto_si/bin
100% si puskal ./configure
E standartno ima enda opcia
--prefix=PREFIX
Tochno tova se ima predvid
Отг: blagodaria za (2.)
Абе, ако програмката я има в PATH няма да стане с getwd(), защото тя връща текущата директория, а тя може да е различна.
Има една команда на shell - which <par1> <par2> ...,
която проверява параметрите дали ги има в PATH и отпечатва пълния
път, ако ги намери.
Та, можеш да пуснеш тази команда с arg[0] и ако тя ти върне "no <par1> in blabla"
значи взимаш argv[0] релативно към текущата директория.
Разбира се първо проверяваш дали argv[0] не започва с '/', което означава, че е стартирана с пълен път.
Ако пък which ти върне нещо друго, то това е пътя на командата, но той пак може да бъде релативен, но това не е проблем- имаш getwc() за да вземеш текущата директория.
Айде успех,
P.S. това за идеологията по-долу е хубаво да се следва, но пък не е задължително, зависи какво си написал.
Има една команда на shell - which <par1> <par2> ...,
която проверява параметрите дали ги има в PATH и отпечатва пълния
път, ако ги намери.
Та, можеш да пуснеш тази команда с arg[0] и ако тя ти върне "no <par1> in blabla"
значи взимаш argv[0] релативно към текущата директория.
Разбира се първо проверяваш дали argv[0] не започва с '/', което означава, че е стартирана с пълен път.
Ако пък which ти върне нещо друго, то това е пътя на командата, но той пак може да бъде релативен, но това не е проблем- имаш getwc() за да вземеш текущата директория.
Айде успех,
P.S. това за идеологията по-долу е хубаво да се следва, но пък не е задължително, зависи какво си написал.
Отг: linux programistiiiiiiiiiiiiiii
Blagodaria na vsichki za savetite!!!!! Za sajalenie me podhvanaha edni problemi s administriraneto na MySQL i zatova se zabavih s otgovora, a i skoro mai niama da imam vreme da za vaprosnata programa, no sas sigurnost shte post-na rezultat ;)
Отг: linux programistiiiiiiiiiiiiiii
Ако имаш монтирана procfs, то /proc/pid/exe е символна връзка към изпълнимия файл.
"pid" е резултата от getpid(2).
"pid" е резултата от getpid(2).
Отг: linux programistiiiiiiiiiiiiiii
// Returns the directory where the executable file resides
// The full name of the executable is pointed by a symbolic link
// /proc/<pid>/exe
// Caller must free the returned string
char * Win::get_bin_dir()
{
// Construct the name of the symbolic link
unsigned pid = getpid();
char link_name[30];
ostrstream s(link_name, 30);
s << "/proc/" << pid << "/exe" << '\0';
// Read where the link points
char * exe = new char[200];
int len = readlink(link_name, exe, 200);
if(len == -1) return 0;
// Cut out the program name (we need the directory)
char * p = exe + len;
while(*p != '/') p--;
// Preserve '/' in path
p++;
*p = 0;
return exe;
} //End of get_bin_dir