C ++ Получить каталог приложений * NIX - PullRequest
2 голосов
/ 19 февраля 2011

Как я могу получить каталог приложений на C ++ в Linux / Unix.getcwd() возвращает каталог, из которого было запущено приложение, но я хочу фактический каталог, в котором находится сборка.

Я знаю, что вы можете получить это из main(), но у меня действительно нет доступа кэто, и мне сказали, что вы не можете положиться на это (это правда?).

Ответы [ 3 ]

2 голосов
/ 19 февраля 2011
1 голос
/ 19 февраля 2011

Как правило, в системе Unix вы не можете предполагать, что существует даже файл или каталог, который все еще указывает на исполняемый файл. Например, файл / каталог мог быть удален во время работы программы (это невозможно в Windows, но не проблема в Unix / Linux). С другой стороны могут быть несколько имен, которые указывают на один и тот же физический файл (жесткие ссылки), ни одно из которых не является основным ... каково в этом случае имя файла?

Не существует безопасного переносимого способа получить имя программы, потому что может быть много имен или вообще нет имен, указывающих на программу. Если вам нужно найти название программы, это означает, что вы пытаетесь сделать что-то не так, и, возможно, есть лучшее решение.

EDIT:

Хотя не существует общего переносимого подхода для всех * x систем, в Linux вы можете использовать имя /proc/self/exe, чтобы открыть исполняемый файл. Это будет работать, даже если файл больше не указан ни одним каталогом (например, даже если файл был «удален» во время работы). Фактический файл (inode) запущенного процесса всегда будет доступен, если процесс все еще выполняется, но может отсутствовать имя файла (то есть список каталогов, указывающий на этот индекс).

0 голосов
/ 19 февраля 2011

argv [0] даст вам полный путь к исполняемому файлу - не знаю, если это общий стандарт

...