Не уверен, но может ли быть так, что test
на самом деле является системой test
командой , а не программой, которую вы написали? Это может произойти, например, если $PATH
не содержит .
, текущий каталог. И, учитывая, что это небольшая платформа, все test
, mv
и т. Д. Фактически могут быть только одним исполняемым файлом, который эмулирует правильную программу, выясняя, как она называется? См., Например, Busybox .
Если это так, все strcmp()
в основном исполняемые файлы, пытающиеся выяснить, как он запускается. Решение: назовите вашу программу как-нибудь иначе, чем test
, или запустите ltrace <path_to_your_executable>/test
.
Вызов strrchr()
перед вызовами strcmp()
убедительно свидетельствует о том, что он пытается извлечь исполняемое «базовое имя» без каталога. В этом случае запуск его как "./test"
, вероятно, не поможет, поэтому вы должны переименовать его в нечто уникальное. (Просто предположение, снова.)
Я могу ошибаться, поскольку теоретически платформа может делать все что угодно, когда запускает исполняемый файл.