Сценарии использования:
Вы можете использовать имя программы, чтобы изменить ее поведение .
Например, вы можете создать несколько символических ссылок на настоящий двоичный файл.
Одним из известных примеров использования этого метода является проект busybox, который устанавливает только один двоичный файл и множество символических ссылок на него. (ls, cp, mv и т. д.). Они делают это, чтобы сэкономить место для хранения, потому что их целью являются небольшие встроенные устройства.
Это также используется в setarch
util-linux:
$ ls -l /usr/bin/ | grep setarch
lrwxrwxrwx 1 root root 7 2015-11-05 02:15 i386 -> setarch
lrwxrwxrwx 1 root root 7 2015-11-05 02:15 linux32 -> setarch
lrwxrwxrwx 1 root root 7 2015-11-05 02:15 linux64 -> setarch
-rwxr-xr-x 1 root root 14680 2015-10-22 16:54 setarch
lrwxrwxrwx 1 root root 7 2015-11-05 02:15 x86_64 -> setarch
Здесь они используют эту технику в основном, чтобы избежать дублирования исходных файлов или просто сделать источники более читабельными.
Другой вариант использования - это программа, которая должна загружать некоторые модули или данные во время выполнения. Наличие пути к программе позволяет вам загружать модули с пути относительно места расположения программы .
Более того, многие программы печатают сообщения об ошибках, включая название программы .
Почему :
- Потому что это соглашение POSIX (
man 3p execve
):
argv - это массив строк аргументов, передаваемых новой программе. По соглашению первая из этих строк должна содержать имя файла, связанное с исполняемым файлом.
- Это стандарт C (по крайней мере, C99 и C11):
Если значение argc больше нуля, строка, на которую указывает argv [0], представляет имя программы; argv [0] [0] должен быть нулевым символом, если имя программы недоступно из среды хоста.
Обратите внимание, что в стандарте C написано «имя программы», а не «имя файла».