Нахождение пути текущего исполняемого файла без / proc / self / exe - PullRequest
177 голосов
/ 21 июня 2009

Мне кажется, что в Linux все проще с / proc / self / exe. Но я хотел бы знать, есть ли удобный способ найти каталог текущего приложения в C / C ++ с кросс-платформенными интерфейсами. Я видел, как некоторые проекты возились с argv [0], но это не совсем надежно.

Если бы вам когда-нибудь приходилось поддерживать, скажем, Mac OS X, у которой нет / proc /, что бы вы сделали? Используйте #ifdefs для изоляции кода, специфичного для платформы (например, NSBundle)? Или попытайтесь определить путь к исполняемому файлу из argv [0], $ PATH и прочего, рискуя найти ошибки в крайних случаях?

Ответы [ 12 ]

0 голосов
/ 28 апреля 2011

Путь абсолютного значения программы находится в PWD envp вашей основной функции, также есть функция в C, называемая getenv, так что это так.

0 голосов
/ 21 июня 2009

AFAIK, нет такого способа. И есть также двусмысленность: что бы вы хотели получить в качестве ответа, если один и тот же исполняемый файл имеет несколько жестких ссылок, «указывающих» на него? (Жесткие ссылки на самом деле не «указывают», они являются тем же файлом, просто в другом месте в иерархии FS.) Как только execve () успешно выполняет новый двоичный файл, вся информация об его аргументах потерял.

...