Абсолютный путь к исполняемой программе

argv[0] ссылается на команду оболочки, которая вызвала загрузку текущего процесса. getcwd() возвращает текущий рабочий каталог. Из этой информации я могу построить абсолютный путь к исполняемому файлу программы? Я не ожидаю, что это сработает, если программа выполнила cd с момента первой загрузки.

  • Как найти / исправить ошибку в пути
  • Должен ли я использовать символические ссылки в / usr / bin или вместо этого использовать переменную PATH?
  • Доступ к исполняемым файлам PgSQL из любого места
  • В чем разница между / bin и ~ / bin?
  • Можно ли указать путь, в котором имя каталога является переменной?
  • открыть файл, используя CDPATH и символическую ссылку
  • Разрешение местоположения / регистрации исполняемого файла в системе?
  • Обои для рабочего стола в XFCE4
  • 2 Solutions collect form web for “Абсолютный путь к исполняемой программе”

    В Linux вы можете использовать symlink /proc/self/exe

     $ ls -l /proc/self/exe lrwxrwxrwx 1 rudi users 0 2016-10-18 16:20 /proc/self/exe -> /usr/bin/ls 

    Во внутренних интерпретаторах языка программирования я использую следующий код, чтобы получить собственный путь:

     #if __linux__ static val get_self_path(void) { char self[PATH_MAX] = { 0 }; int nchar = readlink("/proc/self/exe", self, sizeof self); if (nchar < 0 || nchar >= convert(int, sizeof self)) return nil; return string_utf8(self); } #elif HAVE_WINDOWS_H static val get_self_path(void) { wchar_t self[MAX_PATH] = { 0 }; DWORD nchar; SetLastError(0); nchar = GetModuleFileNameW(NULL, self, MAX_PATH); if (nchar == 0 || (nchar == MAX_PATH && ((GetLastError() == ERROR_INSUFFICIENT_BUFFER) || (self[MAX_PATH - 1] != 0)))) return nil; return string(self); } #else static val get_self_path(void) { char self[PATH_MAX]; if (!progname_u8) return nil; if (realpath(progname_u8, self)) return string_utf8(self); return nil; } #endif 

    Тип val , символ nil и string функций и string_utf8 являются внутренними для интерпретатора. convert – это просто макрос, который абстрагирует кастинг. Конечно, некоторые файлы заголовков требуются для readlink , realpath и так далее.

    progname_u8 – это просто глобальная переменная, инициализированная непосредственно из argv[0] . в Unix, который не является Linux, мы используем его и называем realpath на нем, чтобы получить абсолютный путь.

    Interesting Posts

    linux – показать изображение на консоли / X11

    Как исправить повреждение шаров смолы?

    Почему переименование файла с помощью команды mv изменяет дату и время «изменения» inode?

    Shell показывает, что у меня есть почта, но как я могу ее проверить

    Как спасти полноэкранный гейк из Seahorse Modal Dialog

    Регулярное выражение ERE для разделения () между разделителем и конечным словом

    sigint не распространяется на фоновый дочерний процесс

    эффект сигнала перезагрузки в состоянии serviced службы

    Поддержка SSNiper SSN Scanner

    Как удалить каталоги, начинающиеся с точки после заражения моего сервера?

    Безопасный переход пароля root в сценарий оболочки

    Верните имя пользователя, который только что вошел в систему в сценарии входа в систему

    RPM говорит, что общий объект отсутствует, но я могу найти его с ls

    Solaris SPARC 10 32-битный режим

    Игнорировать пробелы для цикла при печати имени файла?

    Linux и Unix - лучшая ОС в мире.