[C/C++] Полный путь к программе.
Модератор: Модераторы разделов
-
DEMON-X
- Сообщения: 22
- ОС: Gentoo, SUSE 10.3, FreeBSD
[C/C++] Полный путь к программе.
Нужно получить из программы полный путь к самой себе.
При запуске программ из konqueror получаю путь к домашней папке,
откуда бы ни было запущено приложение.
Некоторые проги как-то находят.
Перепробывал:
argv[0]
getenv( "PWD" );
Код из "Advanced Linux Programming",
по понятным причинам перестаёт работать,
если программа упакована, например, UPX.
Как???
При запуске программ из konqueror получаю путь к домашней папке,
откуда бы ни было запущено приложение.
Некоторые проги как-то находят.
Перепробывал:
argv[0]
getenv( "PWD" );
Код из "Advanced Linux Programming",
по понятным причинам перестаёт работать,
если программа упакована, например, UPX.
Как???
Life Is Short....... Play More.
Now Throwed Windows away. Using Linux fully now. :)
Now Throwed Windows away. Using Linux fully now. :)
-
Paul7
- Сообщения: 40
Re: [C/C++] Полный путь к программе.
Смотреть в сторону /proc/self/exe
HP i2000 Dual Itanium / Debian Sarge & Win2k3
Sun Ultra 5 M270 / OpenSolaris Nevada-41
DEC Multia VX42 / OpenBSD 3.8
HP 9000 Model C100 / HP-UX B.11.00
Sun Ultra 5 M270 / OpenSolaris Nevada-41
DEC Multia VX42 / OpenBSD 3.8
HP 9000 Model C100 / HP-UX B.11.00
-
DEMON-X
- Сообщения: 22
- ОС: Gentoo, SUSE 10.3, FreeBSD
Re: [C/C++] Полный путь к программе.
Этот метод как раз и описан в "Advanced Linux Programming",
файл get-exe-path.c
со всеми отсюда вытекающими...
файл get-exe-path.c
со всеми отсюда вытекающими...
Life Is Short....... Play More.
Now Throwed Windows away. Using Linux fully now. :)
Now Throwed Windows away. Using Linux fully now. :)
-
DaemonTux
- Сообщения: 1480
- Статус: Юный падаван
- ОС: Gentoo
-
DEMON-X
- Сообщения: 22
- ОС: Gentoo, SUSE 10.3, FreeBSD
Re: [C/C++] Полный путь к программе.
Я же сказал, он возвращает путь к домашней папке!!!
Life Is Short....... Play More.
Now Throwed Windows away. Using Linux fully now. :)
Now Throwed Windows away. Using Linux fully now. :)
-
Paul7
- Сообщения: 40
Re: [C/C++] Полный путь к программе.
Потому что это не путь до исполняемого файла, а всего лишь аргумент, что передадим, то и будет:
Код: Выделить всё
itanic% pwd
/tmp/1
itanic% cat 1.c
#include <unistd.h>
int
main()
{
execl("/tmp/1/2","abcd",0);
}
itanic% cat 2.c
#include <stdio.h>
int
main(int argc,char** argv)
{
printf("%s\n",argv[0]);
return 0;
}
itanic% ./2
./2
itanic% ./1
abcdHP i2000 Dual Itanium / Debian Sarge & Win2k3
Sun Ultra 5 M270 / OpenSolaris Nevada-41
DEC Multia VX42 / OpenBSD 3.8
HP 9000 Model C100 / HP-UX B.11.00
Sun Ultra 5 M270 / OpenSolaris Nevada-41
DEC Multia VX42 / OpenBSD 3.8
HP 9000 Model C100 / HP-UX B.11.00
-
Женя Подсыпальников
- Сообщения: 482
Re: [C/C++] Полный путь к программе.
А у ядра - нет списка процессов с ихними данными,
для читателей ?
для читателей ?
Пойдём на рыбалку !
-
DaemonTux
- Сообщения: 1480
- Статус: Юный падаван
- ОС: Gentoo
-
Zeus
- Сообщения: 694
-
Женя Подсыпальников
- Сообщения: 482
Re: [C/C++] Полный путь к программе.
Т.е. представляет ли ядро UNIX/Linux возможным -
подобные итерации ?
:
http://msdn2.microsoft.com/en-us/library/ms686701.aspx
подобные итерации ?
http://msdn2.microsoft.com/en-us/library/ms686701.aspx
Пойдём на рыбалку !
-
BlackStar
- Сообщения: 1338
- Статус: We are all Kosh
- ОС: Fedora 10
Re: [C/C++] Полный путь к программе.
А как ты думаешь работают команды ps, top, pmap... ?
LightLang Team
-
Женя Подсыпальников
- Сообщения: 482
Re: [C/C++] Полный путь к программе.
Так там, ведь, в структуре о процессе -
полный путь к его файлу покоиться должен ?
полный путь к его файлу покоиться должен ?
Пойдём на рыбалку !
-
Paul7
- Сообщения: 40
Re: [C/C++] Полный путь к программе.
Всякие ps, top итп. работают как раз через /proc.
В шелл-скриптах нулевой аргумент правильный только потому, что его правильно подсовывает шелл.
В шелл-скриптах нулевой аргумент правильный только потому, что его правильно подсовывает шелл.
HP i2000 Dual Itanium / Debian Sarge & Win2k3
Sun Ultra 5 M270 / OpenSolaris Nevada-41
DEC Multia VX42 / OpenBSD 3.8
HP 9000 Model C100 / HP-UX B.11.00
Sun Ultra 5 M270 / OpenSolaris Nevada-41
DEC Multia VX42 / OpenBSD 3.8
HP 9000 Model C100 / HP-UX B.11.00
-
DEMON-X
- Сообщения: 22
- ОС: Gentoo, SUSE 10.3, FreeBSD
Re: [C/C++] Полный путь к программе.
Вроде вещь-то важная.
Сам по себе путь не очень нужен,
просто перестаёт правильно работать что-то вроде:
open ( "./music/123.mp3", O_RDONLY );
Если программа запущена нормально,
в Console или Krusader, ./appname,
то всё в порядке, файл "./music/123.mp3" будет искаться
в каталоге с программой,
а при запуске в Konqueror - будет искаться
в домашнем каталоге.
Это не есть хорошо.
Сам по себе путь не очень нужен,
просто перестаёт правильно работать что-то вроде:
open ( "./music/123.mp3", O_RDONLY );
Если программа запущена нормально,
в Console или Krusader, ./appname,
то всё в порядке, файл "./music/123.mp3" будет искаться
в каталоге с программой,
а при запуске в Konqueror - будет искаться
в домашнем каталоге.
Это не есть хорошо.
Life Is Short....... Play More.
Now Throwed Windows away. Using Linux fully now. :)
Now Throwed Windows away. Using Linux fully now. :)
-
Liksys
- Сообщения: 2910
Re: [C/C++] Полный путь к программе.
А почему нельзя получать $PWD и приклеивать его префиксом к пути к файлу?
/home/ogurec/./music/123.mp3
Это будет работать.
Можешь даже не так получать, а функцией getcwd():
Но она как видно Линукс-онли
/home/ogurec/./music/123.mp3
Это будет работать.
Можешь даже не так получать, а функцией getcwd():
NAME
getcwd - get current working directory
...
long getcwd(char *buf, unsigned long size);
...
CONFORMING TO
The getcwd system call is Linux specific, use the getcwd C library
function for portability.
Но она как видно Линукс-онли
-
elide
- Бывший модератор
- Сообщения: 2421
- Статус: Übermensch
- ОС: лялих
Re: [C/C++] Полный путь к программе.
Код: Выделить всё
elide@rebirth| ~/tmp/exec >> cat 1.c
#include <unistd.h>
int main(){
execl("2", "XXX", 0);
return 0;
}
elide@rebirth| ~/tmp/exec >> cat 2.c
#include <unistd.h>
#include <linux/limits.h>
int main(int argc, char* argv[]){
printf("argv: %s\n", argv[0]);
char path[PATH_MAX];
int cnt;
if((cnt=readlink("/proc/self/exe", path, PATH_MAX)) > 0){
path[cnt] = 0;
printf("link: %s\n", path);
}
return 0;
}
elide@rebirth| ~/tmp/exec >> gcc -o 1 1.c
elide@rebirth| ~/tmp/exec >> gcc -o 2 2.c
elide@rebirth| ~/tmp/exec >> ./1
argv: XXX
link: /home/elide/tmp/exec/2
elide@rebirth| ~/tmp/exec >>слава роботам!
-
DEMON-X
- Сообщения: 22
- ОС: Gentoo, SUSE 10.3, FreeBSD
Re: [C/C++] Полный путь к программе.
>
> этот ответ дал вам Paul7 в первом же посте. вот расскажите мне, если в первом посте дан ответ,
> нахрена далее следует 12 постов каких-то непотребных гаданий и рассуждений?
>
Вы читать-то умеете?
Всего-то 12 постов,
еще в первом было написано что подобный код
перестаёт работать после упаковки. ( UPX )
upx ./2
P.S.
Все свои хрены оставьте пожалуйста при себе.
> этот ответ дал вам Paul7 в первом же посте. вот расскажите мне, если в первом посте дан ответ,
> нахрена далее следует 12 постов каких-то непотребных гаданий и рассуждений?
>
Вы читать-то умеете?
Всего-то 12 постов,
еще в первом было написано что подобный код
перестаёт работать после упаковки. ( UPX )
upx ./2
P.S.
Все свои хрены оставьте пожалуйста при себе.
Life Is Short....... Play More.
Now Throwed Windows away. Using Linux fully now. :)
Now Throwed Windows away. Using Linux fully now. :)
-
DEMON-X
- Сообщения: 22
- ОС: Gentoo, SUSE 10.3, FreeBSD
Re: [C/C++] Полный путь к программе.
Печально,
можно подвести некоторые итоги.
1. Такая ерунда только в Konqueror.
2. Путь нельзя получить при помощи:
argv[0]
getenv( "PWD" )
getcwd()
get_current_dir_name()
/proc/self/exe
2. Пожалуй стоит переименовать Konqueror в Konquerror
Будем искать...
можно подвести некоторые итоги.
1. Такая ерунда только в Konqueror.
2. Путь нельзя получить при помощи:
argv[0]
getenv( "PWD" )
getcwd()
get_current_dir_name()
/proc/self/exe
2. Пожалуй стоит переименовать Konqueror в Konquerror
Будем искать...
Life Is Short....... Play More.
Now Throwed Windows away. Using Linux fully now. :)
Now Throwed Windows away. Using Linux fully now. :)
-
Женя Подсыпальников
- Сообщения: 482
Re: [C/C++] Полный путь к программе.
Класс QProcess -
показался мне "высокообещающим"...
показался мне "высокообещающим"...
Пойдём на рыбалку !
-
Женя Подсыпальников
- Сообщения: 482
Re: [C/C++] Полный путь к программе.
Ой, его, такой - сначала запустить надо,
шобы оно ответило "откель ?"
А потому, Димон,
вот сюда смотри
А потом -
вот эту "struct task_struct" - в памяти -
на твой путь проскань и - найдёшь её нужное поле
шобы оно ответило "откель ?"
А потому, Димон,
вот сюда смотри
Код: Выделить всё
/*
The tasks are hashed by their pid value and the above hashing function is supposed to distribute the elements uniformly in their domain (0 to PID_MAX-1). The hashtable is used to quickly find a task by given pid, using find_task_pid() inline from [b]include/linux/sched.h[/b]:
--------------------------------------------------------------------------------
*/
static inline struct task_struct *find_task_by_pid(int pid)
{
struct task_struct *p, **htable = &pidhash[pid_hashfn(pid)];
for(p = *htable; p && p->pid != pid; p = p->pidhash_next)
;
return p;
}А потом -
вот эту "struct task_struct" - в памяти -
на твой путь проскань и - найдёшь её нужное поле
Пойдём на рыбалку !