LINUX.ORG.RU
Зачастую вижу как прога запускается при помощи скрипта-враппера, в котором выставлены соответствующие специфичные для проги переменные окружения.
bugmaker ★★★★☆
()
Autotools.
Зачастую вижу как при запуске ./autogen.sh генерится ./configure, при запуске которого генерится config.h в коем и сохраняются разные специфичные для проги переменные.
Deleted
()
Смотришь, куда показывает симлинка /proc/self/exe, выделяешь имя директории, и к примеру chdir туда. Но это только для линукса, естественно.

В FreeBSD вроде бы нету такого простого способа (поправьте меня, если я ошибаюсь), во всяком случае struct kinfo_proc, которую можно достать из sysctl, даёт только командную строку, в которой может и не буть полного пути до бинарника. Хотя конечно зная PATH можно себя и найти... Ну и прочие полудетективные способы имеются...

Teak ★★★★★
()
Да, враппер ИМХО самое оно.
Deleted
()
Ответ на: комментарий от Teak
> /proc/self/exe ...
Сейчас как раз так и делаю, однако это не кроссплатформенный способ!
UVV ★★★★★
() автор топика
Ответ на: комментарий от bugmaker
Понял, про враппер спасибо.
UVV ★★★★★
() автор топика
Ответ на: комментарий от UVV
У тебя задача проще, чем я думал, если пользователи всё же способны поправить переменную в этом скриптике. Тогда конечно врапер без вопросов.

Что не кроссплатформенно - так я про это сам и написал, что кроссплатформенно не выйдет...

Teak ★★★★★
()
Ответ на: комментарий от Teak
Я думаю, что менять там что-либо не потребуется. (Поправьте, если не прав).
В maxima как раз сделан вызов через враппер, домой приду буду разбираться.
UVV ★★★★★
() автор топика
Ответ на: комментарий от UVV
А если использовать argv[0]?

Вот провел простейший тестик:

~$ cd projects
~/projects$ vi main.c

#include "stdio.h"

int main(int argc, char **argv)
{
        printf("%s\n",argv[0]);
        return 0;
}


~/projects$ gcc -o test main.c
~/projects$ cd ..
~$ ./projects/test
./projects/test

Выдает то, что надо. Только отбросить надо до первого / с конца.
olegk ★★
()
Ответ на: комментарий от olegk
Где гарантия что ты этот бинарник запустил не по симлинке или вообще из путей? Нет гарантии. Где гарантия что argv[0] будет показывать на что-то хоть чуть-чуть напоминающее имя запущенной программы? Тоже нет (это всего лишь соглашение, если кто не в курсе).

UVV: То ли я тебя, то ли ты меня не вполне понимаем.

Teak ★★★★★
()
Ответ на: комментарий от olegk
Можно и так попробовать. ;-)
UVV ★★★★★
() автор топика
Может не в тему, но я бы сделал глобальный конфиг в /etc/proga/config и локальный в ~user/.proga.conf

А в этих конфигах соотв. пути к ресурсам и пр.

sdio ★★★★★
()
Ответ на: комментарий от sdio
> я бы сделал глобальный конфиг в /etc/proga/config и локальный в ~user/.proga.conf
Это при случае, когда прога запущена из $PATH, а не из дерева исходных текстов.
UVV ★★★★★
() автор топика
Ответ на: комментарий от UVV
> Да, но resource_path будет разный.

Ресурсы должны храниться в /usr/share/progname или /usr/local/share/progname, найти их легко. Но если у тебя вин-дизайн, где все в кучу свалено, тогда ой... Требуй, чтобы прога ставилась только в c:\mycoolprog и ниипет! :)

shumer
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.