Nano Hash - криптовалюты, майнинг, программирование

Обрабатывать аргументы командной строки?

Итак, я могу запустить свою программу и все такое, но если мне дадут

$ ./a.out -f Text.txt

Я просто не уверен, как заставить программу установить соединение, которое -f указывает на файл. Какова логика для этого?


  • Найдите функцию getopt() в среде выполнения C (man getopt, если вы работаете в системе Unix). 23.10.2014

Ответы:


1

Функция main имеет сигнатуру int main(int argc, char**argv); поэтому вы можете использовать аргументы argc (что положительно) и argv. Массив argv гарантированно содержит argc+1 элементов. Последнее всегда NULL. Остальные - ненулевые строки без псевдонимов, оканчивающиеся нулевым байтом. Обратите внимание, что часто некоторая оболочка является подстановка аргументов перед запуском вашей программы с помощью execve(2): см. glob(7).

Например, если вы набираете (в терминале Linux) myprog -i a*.c -o foo.txt и если в данный момент вы набираете, оболочка расширилась (по подстановка) a*.c в a1.c и a2.c (поскольку это единственные файлы, имена которых начинаются с a и имеют суффикс .c в текущем каталоге), ваша myprog исполняемая main программа вызывается с

  • argc==6
  • argv[0], содержащий "myprog" (чтобы вы могли проверить это strcmp(argv[0],"myprog") == 0)
  • argv[1] содержит "-i"
  • argv[2] содержит "a1.c"
  • argv[3] содержит "a2.c"
  • argv[4] содержит "-o"
  • argv[5] содержит "foo.txt"
  • argv[6] является указателем NULL

Кроме того, вы гарантированно (ядро выполняет execve(2)), что все 6 argv указателей различны, не имеют алиасинга и не перекрываются.

GNU libc предоставляет вам несколько способов проанализируйте эти аргументы: getopt & argp. getopt стандартизирован в POSIX (но GNU также предоставляет очень полезный getopt_long(3))

Я настоятельно рекомендую вам следовать соглашениям GNU: принять как минимум --help и --version

Тот факт, что, например. -f используется для некоторых опций, а не имя файла часто является обычным (но см. использование -- в аргументах программы). Если вам действительно нужен файл с именем -f (что очень плохая идея), используйте ./-f

Некоторые оболочки имеют автозаполнение. Вам нужно настроить их для этого (и вы можете настроить их даже для своих собственных программ).

23.10.2014
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..