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