Highload fwdays — спікери зі Stackoverflow, Netflix, Google, AWS, Rovio | Київ, 5 жовтня
×Закрыть

Немного об argv [0]

Raymond Chen, популярный Microsoft-блоггер описывает роль и смысл argv[0], т.е. «нулевого» аргумента, передающегося программе при запуске.

Как правило, этот аргумент не используется и там лежит «имя программы», обычно это имя исполняемого файла. Когда ОС запускает по запросу пользователя приложение она сама подставляет нужное значение. Хотя теоретически там может быть что угодно; используя системные API легко можно вызвать приложение с произвольным нулевым аргументом.

В Unix есть и более простой способ передать нужное значение: (символические) ссылки. Например, если для исполняемого файла foo создать линк с именем bar то при запуске bar программа foo получит именно bar.

Некоторые программы активно этот трюк используют, например sendmail, Vim или GNU grep. Скажем, /bin/view запускает vi в режиме «только чтение». Такого же эффекта можно достигнуть и при помощи обычных параметров командной строки, конечно (в данном случае: vi -R), но запомнить «альтернативное» имя часто проще и понятнее, чем использовать дополнительную опцию.

Один из встраиваемых линукс-дистрибутивов даже компилировал ВСЕ файлы из /bin в ОДИН бинарный файл и затем выбирал нужную программу по нулевому аргументу. Для экономии дискового пространства. Хотя это уже, скорее, клиника. ;-)

LinkedIn

6 комментариев

Подписаться на комментарииОтписаться от комментариев Комментарии могут оставлять только пользователи с подтвержденными аккаунтами.

argv [0] изощрённый способ манипулирования логикой

Пару слов о besybox-е.Симлинки нужны в первую очередь для того, что бы: 1) знать какая функциональность доступна в главном бинарнике, поскольку доступные команды выбираются при компиляции2) для автодополнения в шелле3) некоторые скрипты проверяют наличие команд через [-f /bin/команда] А busybox — незаменимая вещь, если надо запихнуть много функциональности в пару мегабайт...

%) Лучше проапдейть пост, а то я вот тоже сунулся сказать что это никакая не клиника, а удобная вещь и сказать про BusyBox

Я несколько некорректно выразился. «Клиника» не потому, что так делать не надо или нельзя, а потому, что так может понадобиться делать только в каких-то исключительных случаях.Олег: я, кстати именно BB и имел ввиду.

Вообще то не только какой-то там из дистрабутоивов, а и picobsd так делала: все файлы заворачивались в один с помощью crunchgen. Из-за требования уместиться на дискетку это была не клиника, а таки суровая необходимость. Правда некоторые программы после такого надругательства переставали работать:)

Подписаться на комментарии