- •2. Механизм передачи аргументов командной строки в программу.
- •3. Доступ к аргументам командной строки
- •4. Параметры операционной системы.
- •6. Расшифровка командной строки.
- •7. Запуск и Окончание Процесса программы.
- •8. Синтаксические Соглашения Аргументов Программы
- •9. Опции Программ Синтаксического анализа
- •10. Синтаксический анализ Длинных Опций
- •11. Переменные среды
- •12. Доступ к Среде
- •13. Стандартные Переменные среды
- •14. Завершение Программы
- •15. Прерывание выполнения Программы
- •16. Внутренняя организация Окончания
- •17. Ввод/вывод файлов с помощью командной строки.
- •18. Массивы указателей
- •19. Указатели на указатели
- •20. Открытие файла
6. Расшифровка командной строки.
Предположим, что вы запускаете программу ARGS.EXE со
следующей командной строкой:
C:> args first_arg "arg with blanks" 3 4 "last but one" stop!
Заметим, что вы можете послать аргумент с пробелами,
заключив его в двойные кавычки, как показано на примере
"argument with blanks" и "last but one" в примере вызова
программы.
В результате работы программы вы получите примерно
следующее:
Значение argc равно 7
В командной строке содержится 7 параметров
argv[0]: c:\turboc\testargs.exe
argv[1]: first_arg
argv[2]: arg with blank
argv[3]: 3
argv[4]: 4
argv[5]: last but one
argv[6]: stop!
Среда содержит следующие строки:
env[0]: COMSPEC=C:\COMMAND.COM
env[1]: PROMPT=$p $g
env[2]: PATH=C:\SPRINT;C:\DOS;C:\BC
Максимальная общая длина командной строки, посылаемая
функции main (включая пробелы и имя самой программы), не может
превышать 128 символов; это ограничения DOS.
7. Запуск и Окончание Процесса программы.
Процессы - примитивные модули для распределения ресурсов системы. Каждый процесс имеет собственное адресное пространство. Процесс выполняет программу; Вы можете иметь многократные процессы, выполняющие ту же самую программу, но каждый процесс имеет собственную копию программы внутри собственного адресного пространства и выполняет ее независимо от других копий.
Система начинает программу C, вызывая функцию main. Вы должны написать функцию, именованную main, иначе Вы не будете способны линковать вашу программу без ошибок.
Если синтаксис для аргументов командной строки вашей программы является достаточно простым, Вы может просто выбирать аргументы из argv вручную. Но если ваша программа берет фиксированное число аргументов, или все аргументы интерпретируются одинаковым образом (как имена файлов, например), Вам лучше использовать getopt, чтобы делать синтаксический анализ.
8. Синтаксические Соглашения Аргументов Программы
POSIX рекомендует эти соглашения для аргументов командной строки. Getopt реализует
эти соглашения.
Аргументы - опции, если они начинаются с разделителя дефиса (" - ").
За разделителем могут следовать много опций в одиночной лексеме, если опции не берут аргументов. Таким образом, " -abc " эквивалентно " -a -b -c ".
Имена опций - одиночные алфавитно-цифровые символы (как для isalnum; [Классификация Символов]).
Некоторые опции требуют аргумента. Например, команда ` -o ' ld требует аргумент - имя выходного файла.
Опция и ее аргумент могут не занимать отдельные лексемы. (Другими словами, пропуск, отделяющий их необязателен.) Таким образом, " -o foo " и " -ofoo " эквивалентны.
Опции обычно предшествуют другим аргументам, не-опциям. команды
Реализация getopt в библиотеке GNU C обычно делает так, как будто все аргументы опции были определены перед всеми аргументами не-опциями для целей синтаксического анализа, даже если пользователь вашей программы смешал опции и аргументы не-опции. Она делает это, переупорядочивая элементы массива argv. Это поведение нестандартно; если Вы хотите подавлять его, определите _POSIX_OPTION_ORDER переменную среды. [Стандартная Среда].
Аргумент " -- " завершает все опции; все остальные аргументы обрабатываются как аргументы-не-опции, даже если они начинаются с дефиса.
Лексема, состоящая из одиночного символа дефиса интерпретируется как обычный аргумент-не-опция. Обычно, она используется, чтобы определить ввод из или вывод в стандартный ввод и вывод.
Опции могут быть обеспечены в любом порядке, или появляться многократно. Интерпретация оставлена до специфической прикладной программы.
GNU добавляет длинные опции к этому соглашению. Длинные опции состоят из " -- " сопровождаемых именем, составленным из алфавитно цифровых символов, и подчеркивания. Имена опций - обычно от одного до трех слов длинной, с дефисами, чтобы отделить слова. Пользователи могут сокращать имена опций, если только сокращения уникальны.
Пример длинной опции " --name=value ". Этот синтаксис дает возможность длинной опции принять аргумент, который является самостоятельно необязательным.
В конечном счете, система GNU будет обеспечивать длинные имена опций в оболочке.