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