Это конкретная операционная система. Я думаю, вы находитесь в Linux или какой-то другой системе Posix. Прочтите сначала Advanced Linux Programming. Читайте также о globbing. Имейте в виду, что ваш Unix shell расширяет аргументы (и после расширения вызывается системный вызов execve(2) ....). Если у вас оболочка bash
(и на самом деле это поведение задано POSIX), прочитайте примерно Shell Operation, а затем примерно Shell expansions. Также прочтите главу Program Arguments документации libc
. См. Также my answer о «хороших привычках для разработки аргументов командной строки?».
main
функция (сигнатуры int main(int argc, char**argv);
, и такая [возможно] подпись определяются стандартами C) - программа начатой execve
- получает положительное количество аргументов и NULL
-завершённого массива строк. Так что в вашем случае (./testmt signal1 3 5 1 1
) вы получаете argc=6
и argv[0]
является "./testmt"
, argv[1]
является "signal"
, argv[2]
является "3"
, и т.д ... argv[5]
является последним "1"
и argv[6]
является NULL
.
Итак, погрузитесь в свой код и ищите main
.
PS. AFAIK, в Windows поведение, вероятно, другое. Программа (а не оболочка) расширяет аргументы (фактически, возможно, это делается в файлах автозагрузки, прежде чем они назовут main
). Но я ничего не знаю о Windows. См. Также Operating Systems: Three easy pieces.
Возможный дубликат [Анализ аргументов командной строки?] (Http://stackoverflow.com/questions/9642732/parsing-command-line-arguments) –
найти, где 'main' и начать там (возможно,' int main (int argc, char * argv []) {'). Выполнение 'grep' в исходных файлах должно привести вас туда. – yano
Как мы должны знать, что делает ваша программа? – OldProgrammer