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

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

  • открыть файл, используя CDPATH и символическую ссылку
  • Обои для рабочего стола в XFCE4
  • Bash: путь или ссылка на строку в файле?
  • Получить путь к файлу каталогов, содержащих определенный тип файла в алфавитном / цифровом порядке
  • Можно ли указать путь, в котором имя каталога является переменной?
  • Как найти / исправить ошибку в пути
  • Доступ к исполняемым файлам PgSQL из любого места
  • Почему так много программ живут в PATH?
  • 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

    Я вижу свой LVM, но я не могу его инициализировать. Отсутствует UUID одного из дисков

    Календарная программа Unix, обновленная для работы с несколькими годами?

    Как авторизовать общий ресурс CIFS после подключения WiFi на Raspbian

    Что такое событие hotplug из интерфейса?

    Как удалить пароль для входа в Centos6.5?

    Не удается получить доступ к Desktop Manager после перехода на Kali Sana

    Возврат переменной из функции

    Замените длинную строку командой sed: слишком длинная ошибка списка аргументов

    Установка KolibriOS на флеш-накопителе с использованием GRUB2

    Использование sed с переменной:

    большие серверы электронной почты, отправляемые с сервера, не могут идентифицировать

    Есть ли программное обеспечение для Debian для исправления моего GRUB

    оценка команд двойной блокировки в выражении состояния bash

    Не удается получить доступ к истории команд в моей оболочке (sh)

    Как я имею в виду смелый вес семейства шрифтов на смелый вес другого семейства шрифтов?

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