C ++ Передача Параметров Исполняемому Файлу

StackOverflow https://stackoverflow.com/questions/125124

  •  02-07-2019
  •  | 
  •  

Вопрос

Как вы передаете параметры исполняемому файлу?Есть ли более простой способ, чем сделать параметры логическими аргументами?

Редактировать:В последних двух ответах предлагалось использовать аргументы.Я знаю, что могу закодировать подобное работоспособное решение, но я бы предпочел, чтобы это были варианты.

РЕДАКТИРОВАТЬ 2:В соответствии с запросами о разъяснениях я буду использовать этот простой пример:Обрабатывать аргументы довольно легко, потому что они автоматически преобразуются в массив.

./printfile file.txt 1000

Если я хочу знать, как называется файл, который пользователь хочет распечатать, я получаю доступ к нему через argv [1].

Теперь о том, как обстоят дела в данной ситуации:

./printfile file.txt 1000 --nolinebreaks

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

./printfile file.txt 1000 true

Запрос на использование информирует пользователя о том, что третий аргумент используется для определения того, печатать файл с разрывами строк или нет.Однако это кажется довольно неуклюжим.

Это было полезно?

Решение

Вы, кажется, думаете, что есть какая-то фундаментальная разница между "вариантами", которые начинаются с "--" и "аргументы", которые этого не делают.Разница лишь в том, как вы их анализируете.

Возможно, вам стоит потратить время на то, чтобы ознакомиться с GNU getopt()/getopt_long() анализатор опций.Он поддерживает передачу аргументов с такими параметрами, как --number-of-line-breaks 47.

Другие советы

Лучше всего использовать аргументы командной строки.Возможно, вы захотите рассмотреть возможность использования Boost.ProgramOptions для упрощения этой задачи.

Я использую два метода передачи информации:

1/ Использование аргументов командной строки, с которыми проще обращаться с помощью специальных библиотек, таких как getargs.

2/ В качестве переменных окружения, используя getenv.

У Пакса здесь правильная идея.

Если вам нужна более тщательная двусторонняя связь, откройте процесс с помощью каналов и отправьте данные в stdin / listen в stdout.

Вы также можете использовать функцию postMessage() в Window.Это очень удобно, если исполняемый файл, в который вы хотите отправить параметры, уже запущен.Я могу опубликовать несколько примеров кода, если вас заинтересует эта техника.

Вопрос не совсем ясен относительно контекста и того, что вы пытаетесь сделать - вы имеете в виду запуск исполняемого файла из программы на C ++?Существует несколько стандартных библиотечных функций языка Си с такими именами, как execl(), execv(), execve(), ...которые принимают параметры в виде строк или указателя на массив строк.Существует также system(), которая принимает строку, содержащую все, что вы бы ввели в командной строке bash, параметры и все остальное.

Мне нравится библиотека popt.Это C, но прекрасно работает и с C ++.

Однако он не выглядит кроссплатформенным.Я обнаружил это, когда мне пришлось взломать мою собственную версию, совместимую с API, для порта Windows какого-то программного обеспечения Linux.

Вы можете поместить параметры в ini-файл и использовать API GetPrivateProfileXXX для GetPrivateProfileXXX чтобы создать класс, который может считывать параметры программы, которые вы ищете, из файла .ini.

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

Редактировать:Исходя из ваших правок, не могли бы вы просто проанализировать каждый параметр в поисках специальных ключевых слов, связанных с этим параметром, которые являются "необязательными"?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top