Всего
Я я видел пару реализаций с некоторой эвристикой, и сам писал обобщённо
следующее.
Типа:
1. Если в argv[0] первый символ `/` - то путь абсолютный.
2. Если в argv[0] есть символ `/` то путь относительный и надо его
отсчитывать
от текущего. Hо тут есть подвох если после запуска программы изменялся
текущий
путь.
3. Если ни п.1. ни п.2. то ищем файл по переменной окружения PATH. Тут
тоже есть
тонкости:
1. Пустая подстрока многими расцениваеся как текущий путь (ну или её
можно на
'.' заменять)
Т.е. PATH=:/bin/:/usr/bin/ - ищем в '.' '/bin/' '/usr/bin/'
PATH=/bin/::/usr/bin/ - ищем в '/bin/' '.' '/usr/bin/'
PATH=/bin/:/usr/bin/: - ищем в '/bin/' '/usr/bin/' '.'
2. Если переменная PATH пустая, или не установлена то применяется
дефолтный путь
PATH=:/bin:/usr/bin
Hу далее ещё упрощают путь убирая последовательности типа dir/../ и
разрезолвливают
симлинки.
--
Unrau Alexander
>> Hи кто не подскажет есть ли в Linux'e функция, с помощью которой можно
>> узнать
>> имя файла, который запущен (argv[0]). Hо не через /proc/self/exe, а
>> что-то на
>> подобии Солярковской getexecname?
>> Всего
>
> Я я видел пару реализаций с некоторой эвристикой, и сам писал обобщённо
> следующее.
> Типа:
> 1. Если в argv[0] первый символ `/` - то путь абсолютный.
> 2. Если в argv[0] есть символ `/` то путь относительный и
> надо его
абсолютно некорретно. в argv[0] по определению мусор.
--
john, http://john.kak-sam.to
basename(argv[0]);
Подойдет?
--
WBW
Sergey A. Cherukhin
AP> Здраствуйте.
AP> Ни кто не подскажет есть ли в Linux'e функция, с помощью которой можно узнать
AP> имя файла, который запущен (argv[0]). Но не через /proc/self/exe, а что-то на
AP> подобии Солярковской getexecname?
#include <stdio.h>
#include <limits.h>
#include <stdlib.h>
#define TASK_SIZE 0xc0000000
int main(int argc, char **argv)
{
char *myself, path[PATH_MAX];
myself = (char*)(TASK_SIZE - 5);
while (*--myself)
;
printf("%s\n", realpath(++myself, path));
return 0;
}
--
...
20 Sep 04, Antony Pavlenko ==> All:
AP> Здраствуйте.
AP> Hи кто не подскажет есть ли в Linux'e функция, с помощью которой можно
AP> узнать имя файла, который запущен (argv[0]). Hо не через
AP> /proc/self/exe, а что-то на подобии Солярковской getexecname?
Можно посмотреть, откуда его берет "ps c".
Lucky carrier,
Паша
aka g...@gul.kiev.ua
21 Sep 04, andrew baranovich ==> Antony Pavlenko:
AP>> Здраствуйте.
AP>> Hи кто не подскажет есть ли в Linux'e функция, с помощью которой
AP>> можно узнать имя файла, который запущен (argv[0]). Hо не через
AP>> /proc/self/exe, а что-то на подобии Солярковской getexecname?
ab> #include <stdio.h>
ab> #include <limits.h>
ab> #include <stdlib.h>
ab> #define TASK_SIZE 0xc0000000
ab> int main(int argc, char **argv)
ab> {
ab> char *myself, path[PATH_MAX];
ab> myself = (char*)(TASK_SIZE - 5);
ab> while (*--myself)
ab> ;
ab> printf("%s\n", realpath(++myself, path));
ab> return 0;
ab> }
Что-то не работает. :(
Говорит, "(null)". А ++myself - пустая строка.
Там (перед (char *)0xc0000000) у меня получаются нули сплошные.
2.6.8-1.521.
PG> Что-то не работает. :(
PG> Говорит, "(null)". А ++myself - пустая строка.
PG> Там (перед (char *)0xc0000000) у меня получаются нули сплошные.
PG> 2.6.8-1.521.
Ну, значит, ой. Ж-(
$ uname -sr
Linux 2.4.20-34.7asp
/usr/src/linux-2.4.20-34.7asp/fs/exec.c:
855 retval = prepare_binprm(&bprm);
856 if (retval < 0)
857 goto out;
858 retval = copy_strings_kernel(1, &bprm.filename, &bprm);
859 if (retval < 0)
860 goto out;
--
...
AP> From: "Antony Pavlenko" <an...@synartra.com>
AP> Здраствуйте.
AP> Hи кто не подскажет есть ли в Linux'e функция, с помощью которой можно
AP> узнать имя файла, который запущен (argv[0]). Hо не через /proc/self/exe,
AP> а что-то на подобии Солярковской getexecname?
AP> Всего
Хм, наверно недоформулировал вопрос.
В динамически подключаемой библиотеке необходимо узнать что за прога ее
подключила...
Всего
Согласен, содержимое argv[0] на совести запускающей программы.
Hо как достичь результата не прибегая к /proc* ?
--
Unrau Alexander
А от меня попутный вопрос:
Можно ли какнить надыбать argv[]/argc в любом месте программы (например в
той-же библиотеке и т.д.)?
--
Unrau Alexander
Всего
21 Sep 04 16:41, Antony Pavlenko wrote to Antony Pavlenko:
AP> В динамически подключаемой библиотеке необходимо узнать что за прога ее
AP> подключила...
А явно передавать в парметр функции этой библиотеки нельзя? =)
wbr, Lucky Romio // ro...@ck.ukrtel.net // [wanna smoke!]
... Ea frumoasa ca o floare, luminoasa ca un soare