LINUX.ORG.RU
В каталоге /proc есть подкаталоги, имена которых -- числа. Каждый такой подкаталог сооветствует одному процессу. Число-имя каталога -- это PID процесса. В каждом таком каталоге есть файл `exe'. Он является симлинком на файл, исполняемый данным процессом. Этот симлинк содержит полный путь к файлу.

Таким образом, тебе надо:
1) узнать PID -- функция getpid(2);
2) прочитать линк /proc/<PID>/exe -- функция readlink(2);
3) вырезать из полученной строки имя файла -- останется только каталог.
nobody ★★
()
большое спасибо
JekLove
() автор топика
А зачем так сложно? Можно вытащить из переменной окружения PWD через getenv...
anonymous
()
и чем поможет pwd? если запущено /tra/la/la/kullprog ? не говоря уже о path и прочих делах.
anonymous
()
Ответ на: комментарий от nobody
> прочитать линк /proc/<PID>/exe -- функция readlink(2);
> вырезать из полученной строки имя файла -- останется только каталог.

Не переносимо. Сработает только под Линухом, и только начиная с ядра 2.2
В старых ядрах (2.0 и ранее) это будет поинтером на inode.

Вообще, переносимого способа узнать путь к екзешнику под Юнихом нет.


Die-Hard ★★★★★
()
А если заюзать команду which?
mr_grind
()
which не спасет если у тебя в $PATH есть бинарь а запускался, как-нить с указанием пути, относительного или абсолютного ... /path/to/my/prog ; ./prog
anonymous
()
Так это можно отследить. Если в argv[0] нет слэшиков, то which, а если есть, то: в случае абсолютного имени всё ясно, в случае относительного - pwd тебе в руки.
mr_grind
()
2mr_grind: стандарт в котором регламентируется что класть в argv[0] (имя проги или с путем) в студию! :)
anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.