Получить стартовую позицию - PullRequest
2 голосов
/ 26 августа 2010

Мне нужно найти начальную позицию скрипта в C. Я должен проверить, был ли мой скрипт запущен из / usr / bin или из другого каталога.Я пытался с get_current_directory_name (), но он возвращает текущий путь, где я просматривал, когда я запустил сценарий, поэтому, если я сделаю: cd / home / myaccount / && my-script, он возвращает / home / myaccount, но что мне нужноявляется стартовой позицией.

Ответы [ 4 ]

6 голосов
/ 26 августа 2010

readlink("/proc/self/exe", buffer, buffer_size)

Это даст вам местоположение исполняемого файла под Linux.man 2 readlink

Если вы не используете Linux, вы можете попробовать проверить argv[0] и посмотреть, где находится текущая программа, но вполне возможно запустить программу с другим argv[0]чем путь к программе;это может быть имя исполняемого файла, относительный путь или даже что-то, что не имеет никакого отношения к выполняемой программе.

Последней попыткой определить это может быть поиск программы в PATH и предположим, что если оно есть, то так оно и было.Но я бы не очень доверял этому.

Лучшее решение - не писать программу, основанную на информации такого типа.

0 голосов
/ 26 августа 2010

Fabio

Если вы запускаете 'C-скрипт', то у вас есть процесс, который выполнил (интерпретировал или скомпилировал на лету) этот файл исходного кода .c.

Когда вы попытаетесь определить «начальную точку или источник сценария», вы найдете путь и имя родительского процесса.

Невозможно выполнить скрипт C с позиции его файла исходного кода - , если родительский процесс фактически не компилирует файл исходного кода C в исполняемый файл (который затем можно сохранить любое место, где родительский процесс имеет доступ).

Надежда проясняет этот вопрос.

0 голосов
/ 26 августа 2010

помимо argv [0], вы можете попробовать getcwd (), чтобы получить путь

0 голосов
/ 26 августа 2010

Ну, cd /home/myaccount изменит текущий каталог до запуска my-script, что означает, что my-script не будет знать, где он был изначально.Возможно, вы можете взглянуть на переменную окружения OLDPWD, но это не скажет вам, переключил ли вы dir непосредственно перед тем, как запустил my-script или задолго до этого.

Или, может быть, я вас неправильно понял.Может быть, вы ищете argv [0]?

int main(int argc, char *argv[]) {
  printf("%s\n", argv[0]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...