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
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.