Самый простой способ - это поместить вашу программу в заранее известное место (/ bin, / usr / bin и т. Д.).Если нет, вы можете использовать argv [0], удалить имя программы (последнюю часть) и использовать его в качестве рабочего каталога для префикса всех относительных путей (если вы хотите, чтобы относительные пути были относительно того, где находится ваша программа).
Кроме того, вы можете определить путь к вашей программе, используя метод, описанный выше (используйте argv[0]
), а затем вызвать chdir()
с этим каталогом.Все относительные пути с этого момента будут относительно того, где находится программа.Однако обратите внимание, что в этом случае вы должны определить, содержит ли argv[0]
абсолютный путь.Если нет, вы должны получить текущий рабочий каталог (getcwd()
), а затем добавить часть каталога argv[0]
.Обратите внимание, однако, что изменение текущей работы реж.Обычно это не очень хорошая идея, так как если пользователь указывает вам путь к файлу в качестве аргумента, он будет относительно вашего текущего рабочего каталога, а не относительно того, где хранится программа.
Некоторые примеры: представьте себеваша программа живет в /usr/bin
.Вы можете назвать свою программу как:
/usr/bin/myprog
(это будет argv[0]
. Удалите имя исполняемого файла, и у вас будет ваш каталог.) Или, скажем, в /usr
:
./bin/myprog
Теперь argv[0]
- это относительный путь.Вам необходимо добавить текущий рабочий каталог (/usr
) к одному из argv[0]
: /usr/./bin/myprog
, а затем снова удалить имя исполняемого файла.Каталог будет снова /usr/bin
.